Smush Image Compression and Optimization - Version 2.7.9.1

Version Description

  • Fixed: Conflict with front-end editors
Download this release

Release Info

Developer UmeshSingla
Plugin Icon 128x128 Smush Image Compression and Optimization
Version 2.7.9.1
Comparing to
See all releases

Code changes from version 2.7.8.1 to 2.7.9.1

Files changed (59) hide show
  1. _src/js/index.js +3 -0
  2. _src/scss/admin.scss +1 -0
  3. assets/css/wp-smushit-admin.css +60 -121
  4. assets/images/dev-team@2x.png +0 -0
  5. assets/images/df-banner.jpg +0 -0
  6. assets/images/df-icon.png +0 -0
  7. assets/images/hb-banner.jpg +0 -0
  8. assets/images/hb-icon.png +0 -0
  9. assets/images/sc-banner.png +0 -0
  10. assets/images/sc-icon.png +0 -0
  11. assets/js/bulk-smush.js +0 -8
  12. assets/js/jQueryFileTree.js +11 -4
  13. assets/js/media.js +46 -64
  14. assets/js/ui.js +0 -23
  15. assets/js/wp-smushit-admin.js +68 -43
  16. assets/shared-ui-2/css/admin.min.css +1 -0
  17. assets/shared-ui-2/fonts/WPMU-DEV-Icon.eot +0 -0
  18. assets/shared-ui-2/fonts/WPMU-DEV-Icon.svg +233 -0
  19. assets/shared-ui-2/fonts/WPMU-DEV-Icon.ttf +0 -0
  20. assets/shared-ui-2/fonts/WPMU-DEV-Icon.woff +0 -0
  21. assets/shared-ui-2/fonts/WPMU-DEV-Icon.woff2 +0 -0
  22. assets/shared-ui-2/images/graphic-hb-minify-summary@2x.png +0 -0
  23. assets/shared-ui-2/images/plugins-crawl-icon.png +0 -0
  24. assets/shared-ui-2/images/plugins-crawl-icon@2x.png +0 -0
  25. assets/shared-ui-2/images/plugins-crawl.jpg +0 -0
  26. assets/shared-ui-2/images/plugins-defender-icon.png +0 -0
  27. assets/shared-ui-2/images/plugins-defender-icon@2x.png +0 -0
  28. assets/shared-ui-2/images/plugins-defender.jpg +0 -0
  29. assets/shared-ui-2/images/plugins-smush-icon.png +0 -0
  30. assets/shared-ui-2/images/plugins-smush-icon@2x.png +0 -0
  31. assets/shared-ui-2/images/plugins-smush.jpg +0 -0
  32. assets/shared-ui-2/js/admin.min.js +7 -0
  33. assets/shared-ui-2/js/admin.min.js.map +1 -0
  34. assets/shared-ui/README.md +0 -13
  35. assets/shared-ui/contributors.txt +0 -1
  36. assets/shared-ui/wdev-ui.css +177 -858
  37. extras/dash-notice/wpmudev-dash-notification.php +0 -1306
  38. languages/wp-smushit.pot +279 -242
  39. lib/class-wp-smush-admin.php +187 -113
  40. lib/class-wp-smush-backup.php +9 -5
  41. lib/class-wp-smush-bulk.php +0 -96
  42. lib/class-wp-smush-db.php +3 -2
  43. lib/class-wp-smush-dir.php +101 -52
  44. lib/class-wp-smush-helper.php +51 -0
  45. lib/class-wp-smush-nextgen.php +10 -3
  46. lib/class-wp-smush-recommender.php +134 -0
  47. lib/class-wp-smush-s3.php +5 -5
  48. lib/class-wp-smush-settings.php +21 -4
  49. lib/class-wp-smush-share.php +2 -2
  50. lib/class-wp-smush-stats.php +0 -592
  51. lib/class-wp-smush-ui.php +28 -86
  52. lib/class-wp-smush.php +177 -55
  53. lib/nextgen-integration/class-wp-smush-nextgen-admin.php +167 -101
  54. lib/nextgen-integration/class-wp-smush-nextgen-bulk.php +5 -6
  55. lib/nextgen-integration/class-wp-smush-nextgen-stats.php +219 -41
  56. lib/wp-async-task.php +0 -275
  57. readme.txt +30 -4
  58. uninstall.php +6 -1
  59. wp-smush.php +31 -8
_src/js/index.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ import '@wpmudev/shared-ui';
2
+
3
+ console.log('This is the entry point.');
_src/scss/admin.scss ADDED
@@ -0,0 +1 @@
 
1
+ @import "~@wpmudev/shared-ui/scss/shared-ui.scss";
assets/css/wp-smushit-admin.css CHANGED
@@ -523,7 +523,8 @@ label.setting.smush-stats .wp-smush-stats-holder td,
523
  word-wrap: break-word;
524
  }
525
 
526
- label.setting.smush-stats a.wp-smush-action.wp-smush-title {
 
527
  display: inline-block;
528
  }
529
 
@@ -561,7 +562,7 @@ label.setting.smush-stats button.wp-smush-send span {
561
  }
562
 
563
  .media-modal .media-sidebar label.setting.smush-stats button.wp-smush-send span {
564
- /*padding-top: 0;*/
565
  }
566
 
567
  label.setting.smush-stats button.wp-smush-send[disabled] span {
@@ -835,14 +836,6 @@ label.setting.smush-stats div.wp-smush-progress span {
835
  padding-top: 20px;
836
  }
837
 
838
- .wpmud .row .col-half.wp-smush-pro-for-free {
839
- padding-left: 0;
840
- }
841
-
842
- .wpmud .row .col-half.wp-smush-pro-for-free .dev-box {
843
- padding: 30px 0;
844
- }
845
-
846
  .wpmud .wp-smush-premium .smush-container-subheading a {
847
  border: solid 2px #1ABC9C;
848
  border-radius: 13px;
@@ -854,6 +847,16 @@ label.setting.smush-stats div.wp-smush-progress span {
854
  color: #fff;
855
  }
856
 
 
 
 
 
 
 
 
 
 
 
857
  .smush-stats-wrapper .smush-container-subheading {
858
  margin: 1.2em 0 0.9em;
859
  max-width: 90%;
@@ -930,7 +933,7 @@ Quick Setup Dialog
930
  padding: 30px;
931
  }
932
 
933
- .wpmud .dev-overlay.wp-smush-get-pro .box{
934
  padding-bottom: 0;
935
  }
936
 
@@ -1015,8 +1018,7 @@ div.smush-quick-setup-settings div.submit-button-wrap {
1015
  }
1016
 
1017
  .wpmud div.smush-quick-setup-settings div.submit-button-wrap button:hover,
1018
- .wpmud div.smush-quick-setup-settings div.submit-button-wrap button:focus
1019
- {
1020
  background-color: #0A9BD6 !important;
1021
  }
1022
 
@@ -1225,7 +1227,8 @@ div.wp-smush-dir-limit,
1225
  div.smush-s3-setup-error,
1226
  div.smush-s3-setup-message,
1227
  div.wp-smush-s3support-alert,
1228
- div.wp-smush-notice.wp-smush-api-message.warning{
 
1229
  background-color: #FFF5D5;
1230
  border: none;
1231
  color: #333333;
@@ -1309,7 +1312,7 @@ div.wp-smush-dir-limit .icon-fi-info:before {
1309
  }
1310
 
1311
  .wpmud .bulk-smush-wrapper .wp-smush-remaining .icon-fi-warning-alert,
1312
- .wp-smush-api-message .icon-fi-warning-alert{
1313
  display: inline-block;
1314
  font-size: 20px;
1315
  margin-right: 8px;
@@ -1544,14 +1547,20 @@ div.smush-sub-setting-wrapper:last-child {
1544
  margin-bottom: 0;
1545
  }
1546
 
1547
- div.smush-sub-setting-wrapper span.wp-smush-setting-desc {
 
1548
  color: #888888;
1549
  display: inline-block;
 
1550
  font-size: 13px;
1551
  line-height: 22px;
1552
  margin-top: 10px;
1553
  }
1554
 
 
 
 
 
1555
  /** Stats Container **/
1556
  .wpmud .dev-box.smush-stats-wrapper {
1557
  color: #333333;
@@ -1632,7 +1641,7 @@ a.wp-smush-lossy-enable {
1632
 
1633
  .wpmud .wp-smush-stats-try-pro:hover > a, .wpmud .wp-smush-stats-try-pro a:hover {
1634
  background-color: #1ABC9C;
1635
- color: #fff;
1636
  cursor: pointer;
1637
  }
1638
 
@@ -1641,30 +1650,6 @@ a.wp-smush-lossy-enable {
1641
  margin-top: -2px;
1642
  }
1643
 
1644
- /** For Smush Pro Promo and Humming Bird promo **/
1645
- .wpmud .wp-smush-pro-adv {
1646
- background-image: url(../images/dev-team.png);
1647
- background-repeat: no-repeat;
1648
- background-position: center bottom;
1649
- background-size: 90%;
1650
- height: 500px;
1651
- overflow: hidden;
1652
- }
1653
-
1654
- .wpmud .dev-box.wp-smush-pro-adv .wp-smush-container-header {
1655
- margin: -30px 0 30px;
1656
- }
1657
-
1658
- .wpmud .wp-smush-pro-adv .box-content {
1659
- padding: 0 30px;
1660
- }
1661
-
1662
- .wp-smushit-container-right .wp-smush-pro-adv > img {
1663
- max-width: 100%;
1664
- margin: 0 auto;
1665
- display: block;
1666
- }
1667
-
1668
  .wpmud .dev-overlay {
1669
  -webkit-font-smoothing: antialiased;
1670
  }
@@ -1732,60 +1717,6 @@ div.smush-pro-link-wrap {
1732
  box-shadow: none;
1733
  }
1734
 
1735
- .wp-smush-pro-cta {
1736
- overflow: hidden;
1737
- display: block;
1738
- padding: 20px;
1739
- }
1740
-
1741
- .wp-smush-hb-cta {
1742
- display: block;
1743
- margin: 0 auto;
1744
- overflow: hidden;
1745
- padding-bottom: 0;
1746
- padding-top: 30px;
1747
- width: 242px;
1748
- }
1749
-
1750
- .wp-smush-hummingbird-image {
1751
- display: block;
1752
- margin: 40px 0 20px 0;
1753
- overflow: hidden;
1754
- }
1755
-
1756
- .wpmud .wp-smush-promo-content {
1757
- color: #666666;
1758
- line-height: 1.7;
1759
- margin: auto;
1760
- text-align: center;
1761
- }
1762
-
1763
- .wpmud .wp-smush-promo-content-2 {
1764
- margin-top: 30px;
1765
- }
1766
-
1767
- .wpmud .wp-smush-pro-cta .button.button-cta {
1768
- box-shadow: none !important;
1769
- }
1770
-
1771
- .wpmud .wp-smush-pro-cta .button.button-cta:hover,
1772
- .wpmud .wp-smush-pro-cta .button.button-cta:active,
1773
- .wpmud .wp-smush-pro-cta .button.button-cta:focus {
1774
- background: #17b394 !important;
1775
- }
1776
-
1777
- .wpmud .wp-smush-hb-cta .button.button-cta {
1778
- box-shadow: none;
1779
- width: 100%;
1780
- }
1781
-
1782
- .wpmud .box-content .wp-smush-hb-cta .button.button-cta:hover,
1783
- .wpmud .box-content .wp-smush-hb-cta .button.button-cta:active,
1784
- .wpmud .box-content .wp-smush-hb-cta .button.button-cta:focus {
1785
- background: #0A9BD6 !important;
1786
- box-shadow: none;
1787
- }
1788
-
1789
  /** Re Smush **/
1790
  .wp-smush-settings-changed {
1791
  background: #dff6fa;
@@ -2315,11 +2246,8 @@ div.wp-smush-dir-desc {
2315
  vertical-align: top;
2316
  }
2317
 
2318
- .jqueryFileTree li {
2319
- display: inline-block;
2320
- }
2321
-
2322
  .wpmud UL.jqueryFileTree LI {
 
2323
  padding: 0 0 5px 20px;
2324
  }
2325
 
@@ -2346,7 +2274,8 @@ div.wp-smush-dir-desc {
2346
  background: url(../images/folder-open-selected.svg) left top no-repeat;
2347
  }
2348
 
2349
- .wpmud UL.jqueryFileTree LI.expanded.selected > a {
 
2350
  color: #17a8e3;
2351
  }
2352
 
@@ -2537,8 +2466,8 @@ div.smush-s3-setup-message .icon-fi-check-tick {
2537
  vertical-align: middle;
2538
  }
2539
 
2540
- div.smush-s3-setup-error i. icon-fi-warning-alert,
2541
- div.smush-s3-setup-message .icon-fi-check-tick {
2542
  margin-top: 3px;
2543
  vertical-align: top;
2544
  }
@@ -2683,7 +2612,8 @@ li.wp-smush-image-ele span.wp-smush-image-path {
2683
  font-weight: normal;
2684
  height: 22px;
2685
  line-height: 22px;
2686
- margin-top: -12px;
 
2687
  opacity: 1;
2688
  position: absolute;
2689
  speak: none;
@@ -2798,12 +2728,6 @@ div.wp-smush-info.notice {
2798
  background-color: #17A8E3;
2799
  }
2800
 
2801
- .wpmud div.smush-page-wrap div.wp-smush-pro-for-free .button {
2802
- background-color: #1ABC9C;
2803
- border-radius: 4px;
2804
- padding: 10px 20px
2805
- }
2806
-
2807
  /* Bulk Smush button*/
2808
  button.wp-smush-all.wp-smush-button {
2809
  float: right;
@@ -2827,6 +2751,33 @@ button.wp-smush-all.wp-smush-button {
2827
  background: #AEAEAE;
2828
  }
2829
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2830
  /** Media Queries **/
2831
  @media screen and (min-width: 1425px) {
2832
  .wpmud .wp-smush-super-smush-promo {
@@ -2869,14 +2820,6 @@ button.wp-smush-all.wp-smush-button {
2869
  }
2870
 
2871
  @media screen and (max-width: 1024px) and ( min-width: 800px ) {
2872
- .wpmud .wrap .dev-box:not(.wp-smush-pro-adv) {
2873
- padding: 20px;
2874
- }
2875
-
2876
- .wpmud .dev-box.wp-smush-pro-adv .box-title, .wpmud .wp-smush-pro-adv .box-content {
2877
- padding: 0 20px;
2878
- }
2879
-
2880
  /** Stats Section **/
2881
  .smush-stats-wrapper h3 {
2882
  padding: 6px 0;
@@ -2920,10 +2863,6 @@ button.wp-smush-all.wp-smush-button {
2920
  overflow: visible;
2921
  width: 50% !important;
2922
  }
2923
-
2924
- .wpmud .wp-smush-promo-content, .wpmud .wp-smush-promo-content-smaller {
2925
- max-width: none;
2926
- }
2927
  }
2928
 
2929
  @media only screen and (max-width: 960px) {
523
  word-wrap: break-word;
524
  }
525
 
526
+ label.setting.smush-stats a.wp-smush-action.wp-smush-title,
527
+ div.smush-status-links a.wp-smush-action.wp-smush-title {
528
  display: inline-block;
529
  }
530
 
562
  }
563
 
564
  .media-modal .media-sidebar label.setting.smush-stats button.wp-smush-send span {
565
+ padding-top: 0;
566
  }
567
 
568
  label.setting.smush-stats button.wp-smush-send[disabled] span {
836
  padding-top: 20px;
837
  }
838
 
 
 
 
 
 
 
 
 
839
  .wpmud .wp-smush-premium .smush-container-subheading a {
840
  border: solid 2px #1ABC9C;
841
  border-radius: 13px;
847
  color: #fff;
848
  }
849
 
850
+ .attachment-details .setting div.smush-status-links {
851
+ float: none;
852
+ text-align: left;
853
+ margin-bottom: 15px;
854
+ }
855
+
856
+ div.attachment-details .setting div.smush-status-links.smush-status-links div.smush-stats-wrapper {
857
+ margin-top: 15px;
858
+ }
859
+
860
  .smush-stats-wrapper .smush-container-subheading {
861
  margin: 1.2em 0 0.9em;
862
  max-width: 90%;
933
  padding: 30px;
934
  }
935
 
936
+ .wpmud .dev-overlay.wp-smush-get-pro .box {
937
  padding-bottom: 0;
938
  }
939
 
1018
  }
1019
 
1020
  .wpmud div.smush-quick-setup-settings div.submit-button-wrap button:hover,
1021
+ .wpmud div.smush-quick-setup-settings div.submit-button-wrap button:focus {
 
1022
  background-color: #0A9BD6 !important;
1023
  }
1024
 
1227
  div.smush-s3-setup-error,
1228
  div.smush-s3-setup-message,
1229
  div.wp-smush-s3support-alert,
1230
+ div.wp-smush-notice.wp-smush-api-message.warning,
1231
+ div.wp-smush-notice.missing_table {
1232
  background-color: #FFF5D5;
1233
  border: none;
1234
  color: #333333;
1312
  }
1313
 
1314
  .wpmud .bulk-smush-wrapper .wp-smush-remaining .icon-fi-warning-alert,
1315
+ .wp-smush-api-message .icon-fi-warning-alert {
1316
  display: inline-block;
1317
  font-size: 20px;
1318
  margin-right: 8px;
1547
  margin-bottom: 0;
1548
  }
1549
 
1550
+ div.smush-sub-setting-wrapper span.wp-smush-setting-desc,
1551
+ div.smush-quick-setup-settings span.wp-smush-setting-desc {
1552
  color: #888888;
1553
  display: inline-block;
1554
+ font-family: "Roboto", "sans-serif";
1555
  font-size: 13px;
1556
  line-height: 22px;
1557
  margin-top: 10px;
1558
  }
1559
 
1560
+ div.smush-sub-setting-wrapper span.wp-smush-setting-desc.desc-note {
1561
+ font-weight: 500;
1562
+ }
1563
+
1564
  /** Stats Container **/
1565
  .wpmud .dev-box.smush-stats-wrapper {
1566
  color: #333333;
1641
 
1642
  .wpmud .wp-smush-stats-try-pro:hover > a, .wpmud .wp-smush-stats-try-pro a:hover {
1643
  background-color: #1ABC9C;
1644
+ color: #fff !important;
1645
  cursor: pointer;
1646
  }
1647
 
1650
  margin-top: -2px;
1651
  }
1652
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1653
  .wpmud .dev-overlay {
1654
  -webkit-font-smoothing: antialiased;
1655
  }
1717
  box-shadow: none;
1718
  }
1719
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1720
  /** Re Smush **/
1721
  .wp-smush-settings-changed {
1722
  background: #dff6fa;
2246
  vertical-align: top;
2247
  }
2248
 
 
 
 
 
2249
  .wpmud UL.jqueryFileTree LI {
2250
+ display: inline-block;
2251
  padding: 0 0 5px 20px;
2252
  }
2253
 
2274
  background: url(../images/folder-open-selected.svg) left top no-repeat;
2275
  }
2276
 
2277
+ .wpmud UL.jqueryFileTree LI.expanded.selected > a,
2278
+ .wpmud UL.jqueryFileTree LI.file.selected a {
2279
  color: #17a8e3;
2280
  }
2281
 
2466
  vertical-align: middle;
2467
  }
2468
 
2469
+ div.smush-s3-setup-error i.icon-fi-warning-alert,
2470
+ div.smush-s3-setup-message i.icon-fi-check-tick {
2471
  margin-top: 3px;
2472
  vertical-align: top;
2473
  }
2612
  font-weight: normal;
2613
  height: 22px;
2614
  line-height: 22px;
2615
+ margin-left: 1px;
2616
+ margin-top: -11px;
2617
  opacity: 1;
2618
  position: absolute;
2619
  speak: none;
2728
  background-color: #17A8E3;
2729
  }
2730
 
 
 
 
 
 
 
2731
  /* Bulk Smush button*/
2732
  button.wp-smush-all.wp-smush-button {
2733
  float: right;
2751
  background: #AEAEAE;
2752
  }
2753
 
2754
+ /**
2755
+ WordPress.org Recommendation Styling
2756
+ */
2757
+ .sui-2-1-0 .sui-cross-sell-modules .sui-col-md-4 .sui-cross-hummingbird {
2758
+ background-image: url(../images/hb-banner.jpg);
2759
+ }
2760
+
2761
+ .sui-2-1-0 .sui-cross-sell-modules .sui-col-md-4 .sui-cross-defender {
2762
+ background-image: url(../images/df-banner.jpg);
2763
+ }
2764
+
2765
+ .sui-2-1-0 .sui-cross-sell-modules .sui-col-md-4 .sui-cross-smartcrawl {
2766
+ background-image: url(../images/sc-banner.png);
2767
+ }
2768
+
2769
+ .sui-2-1-0 .sui-cross-sell-modules .sui-col-md-4 .sui-cross-hummingbird > span {
2770
+ background-image: url(../images/hb-icon.png);
2771
+ }
2772
+
2773
+ .sui-2-1-0 .sui-cross-sell-modules .sui-col-md-4 .sui-cross-defender > span {
2774
+ background-image: url(../images/df-icon.png);
2775
+ }
2776
+
2777
+ .sui-2-1-0 .sui-cross-sell-modules .sui-col-md-4 .sui-cross-smartcrawl > span {
2778
+ background-image: url(../images/sc-icon.png);
2779
+ }
2780
+
2781
  /** Media Queries **/
2782
  @media screen and (min-width: 1425px) {
2783
  .wpmud .wp-smush-super-smush-promo {
2820
  }
2821
 
2822
  @media screen and (max-width: 1024px) and ( min-width: 800px ) {
 
 
 
 
 
 
 
 
2823
  /** Stats Section **/
2824
  .smush-stats-wrapper h3 {
2825
  padding: 6px 0;
2863
  overflow: visible;
2864
  width: 50% !important;
2865
  }
 
 
 
 
2866
  }
2867
 
2868
  @media only screen and (max-width: 960px) {
assets/images/dev-team@2x.png ADDED
Binary file
assets/images/df-banner.jpg ADDED
Binary file
assets/images/df-icon.png ADDED
Binary file
assets/images/hb-banner.jpg ADDED
Binary file
assets/images/hb-icon.png ADDED
Binary file
assets/images/sc-banner.png ADDED
Binary file
assets/images/sc-icon.png ADDED
Binary file
assets/js/bulk-smush.js DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * All the function related to Bulk Smushing page
3
- *
4
- * @author Umesh Kumar <umeshsingla05@gmail.com>
5
- *
6
- * @since 2.7.1
7
- *
8
- */
 
 
 
 
 
 
 
 
assets/js/jQueryFileTree.js CHANGED
@@ -71,7 +71,7 @@ var bind = function(fn, me){ return function(){ return fn.apply(me, arguments);
71
  }
72
  if ($ev.parent().hasClass('directory')) {
73
  //Add a selected class to directory, Thanks to shortpixel for the modification in here
74
- _this.jqft.container.find('LI.directory').removeClass('selected');
75
  $ev.parent().addClass('selected');
76
 
77
  if ($ev.parent().hasClass('collapsed')) {
@@ -103,16 +103,23 @@ var bind = function(fn, me){ return function(){ return fn.apply(me, arguments);
103
  });
104
  }
105
  } else {
106
- if (!options.multiSelect) {
107
  jqft.container.find('li').removeClass('selected');
108
  $ev.parent().addClass('selected');
109
  } else {
 
110
  if ($ev.parent().find('input').is(':checked')) {
111
  $ev.parent().find('input').prop('checked', false);
112
  $ev.parent().removeClass('selected');
113
  } else {
114
- $ev.parent().find('input').prop('checked', true);
115
- $ev.parent().addClass('selected');
 
 
 
 
 
 
116
  }
117
  }
118
  _this._trigger('filetreeclicked', _this.data);
71
  }
72
  if ($ev.parent().hasClass('directory')) {
73
  //Add a selected class to directory, Thanks to shortpixel for the modification in here
74
+ _this.jqft.container.find('LI').removeClass('selected');
75
  $ev.parent().addClass('selected');
76
 
77
  if ($ev.parent().hasClass('collapsed')) {
103
  });
104
  }
105
  } else {
106
+ if (!options.multiSelect && ! $ev.parent().hasClass('file') ) {
107
  jqft.container.find('li').removeClass('selected');
108
  $ev.parent().addClass('selected');
109
  } else {
110
+ jqft.container.find('li.directory').removeClass('selected');
111
  if ($ev.parent().find('input').is(':checked')) {
112
  $ev.parent().find('input').prop('checked', false);
113
  $ev.parent().removeClass('selected');
114
  } else {
115
+
116
+ //If the element already have selected class, reset it
117
+ if( $ev.parent().hasClass('selected') ) {
118
+ $ev.parent().removeClass('selected');
119
+ }else {
120
+ $ev.parent().find('input').prop('checked', true);
121
+ $ev.parent().addClass('selected');
122
+ }
123
  }
124
  }
125
  _this._trigger('filetreeclicked', _this.data);
assets/js/media.js CHANGED
@@ -3,59 +3,52 @@
3
  *
4
  *
5
  */
6
- (function( $, _ ) {
7
 
8
- // Local reference to the WordPress media namespace.
9
- var smush_media = wp.media;
10
 
11
- if( 'undefined' != typeof smush_media.view &&
12
- 'undefined' != typeof smush_media.view.Attachment.Details.TwoColumn ) {
13
  // Local instance of the Attachment Details TwoColumn used in the edit attachment modal view
14
  var smushMediaTwoColumn = smush_media.view.Attachment.Details.TwoColumn;
15
 
16
  /**
 
17
  * Add Smush details to attachment.
18
  */
19
  smush_media.view.Attachment.Details.TwoColumn = smushMediaTwoColumn.extend({
20
 
21
- render: function () {
22
- // Get Smush status for the image
23
- this.getSmushDetails(this.model.get('id'));
24
  },
25
 
26
- getSmushDetails: function (id) {
27
- wp.ajax.send('smush_get_attachment_details', {
28
- data: {
29
- _nonce: smush_vars.nonce.get_smush_status,
30
- id: id
31
- }
32
- }).done(_.bind(this.renderSmush, this));
33
- },
34
 
35
- renderSmush: function (response) {
36
- // Render parent media.view.Attachment.Details
37
- smushMediaTwoColumn.prototype.render.apply(this);
38
 
39
- this.renderSmushStatus(response);
40
- },
41
 
42
- renderSmushStatus: function (response) {
43
- if (!response) {
44
- return;
45
- }
46
- var $detailsHtml = this.$el.find('.attachment-compat');
47
- var html = this.generateHTML(response);
48
- $detailsHtml.append(html);
49
- },
50
 
51
- generateHTML: function (response) {
52
  var template = _.template('<label class="setting smush-stats" data-setting="description"><span class="name"><%= label %></span><span class="value"><%= value %></span></label>');
53
  var html = template({
54
  label: smush_vars.strings['stats_label'],
55
- value: response
56
  });
57
 
58
- return html;
 
 
 
 
59
  }
60
  });
61
  }
@@ -66,47 +59,36 @@
66
  /**
67
  * Add Smush details to attachment.
68
  */
69
- smush_media.view.Attachment.Details = smushAttachmentDetails.extend( {
70
 
71
- render: function() {
72
- // Get Smush status for the image
73
- this.getSmushDetails( this.model.get('id') );
74
  },
 
 
 
75
 
76
- getSmushDetails: function( id ) {
77
- wp.ajax.send( 'smush_get_attachment_details', {
78
- data: {
79
- _nonce: smush_vars.nonce.get_smush_status,
80
- id: id
81
- }
82
- } ).done( _.bind( this.renderSmush, this ) );
83
- },
84
-
85
- renderSmush: function( response ) {
86
- // Render parent media.view.Settings.AttachmentDisplay
87
- smushAttachmentDetails.prototype.render.apply( this );
88
-
89
- this.renderSmushStatus( response );
90
- },
91
-
92
- renderSmushStatus: function( response ) {
93
- if ( ! response ) {
94
- return;
95
  }
96
- var $detailsHtml = this.$el.parent().find('.compat-item');
97
- var html = this.generateHTML( response );
98
- $detailsHtml.append( html );
99
- },
100
 
101
- generateHTML: function (response) {
 
 
102
  var template = _.template('<label class="setting smush-stats" data-setting="description"><span class="name"><%= label %></span><span class="value"><%= value %></span></label>');
103
  var html = template({
104
  label: smush_vars.strings['stats_label'],
105
- value: response
106
  });
107
 
108
- return html;
 
 
 
 
 
109
  }
110
- } );
111
 
112
- })( jQuery, _ );
3
  *
4
  *
5
  */
6
+ (function ($, _) {
7
 
8
+ // Local reference to the WordPress media namespace.
9
+ var smush_media = wp.media;
10
 
11
+ if ('undefined' != typeof smush_media.view &&
12
+ 'undefined' != typeof smush_media.view.Attachment.Details.TwoColumn) {
13
  // Local instance of the Attachment Details TwoColumn used in the edit attachment modal view
14
  var smushMediaTwoColumn = smush_media.view.Attachment.Details.TwoColumn;
15
 
16
  /**
17
+ /*
18
  * Add Smush details to attachment.
19
  */
20
  smush_media.view.Attachment.Details.TwoColumn = smushMediaTwoColumn.extend({
21
 
22
+ initialize: function () {
23
+ // Always make sure that our content is up to date.
24
+ this.model.on('change', this.render, this);
25
  },
26
 
27
+ render: function () {
28
+ // Ensure that the main attachment fields are rendered.
29
+ smush_media.view.Attachment.prototype.render.apply(this, arguments);
 
 
 
 
 
30
 
31
+ if (typeof (this.model.get('smush')) == 'undefined') {
32
+ return this;
33
+ }
34
 
35
+ // Detach the views, append our custom fields, make sure that our data is fully updated and re-render the updated view.
36
+ this.views.detach();
37
 
38
+ var $detailsHtml = this.$el.find('.settings');
 
 
 
 
 
 
 
39
 
40
+ //Create the template
41
  var template = _.template('<label class="setting smush-stats" data-setting="description"><span class="name"><%= label %></span><span class="value"><%= value %></span></label>');
42
  var html = template({
43
  label: smush_vars.strings['stats_label'],
44
+ value: this.model.get('smush')
45
  });
46
 
47
+ $detailsHtml.append(html);
48
+ this.model.fetch();
49
+ this.views.render();
50
+
51
+ return this;
52
  }
53
  });
54
  }
59
  /**
60
  * Add Smush details to attachment.
61
  */
62
+ smush_media.view.Attachment.Details = smushAttachmentDetails.extend({
63
 
64
+ initialize: function () {
65
+ // Always make sure that our content is up to date.
66
+ this.model.on('change', this.render, this);
67
  },
68
+ render: function () {
69
+ // Ensure that the main attachment fields are rendered.
70
+ smush_media.view.Attachment.prototype.render.apply(this, arguments);
71
 
72
+ if (typeof (this.model.get('smush')) == 'undefined') {
73
+ return this;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  }
 
 
 
 
75
 
76
+ // Detach the views, append our custom fields, make sure that our data is fully updated and re-render the updated view.
77
+ this.views.detach();
78
+
79
  var template = _.template('<label class="setting smush-stats" data-setting="description"><span class="name"><%= label %></span><span class="value"><%= value %></span></label>');
80
  var html = template({
81
  label: smush_vars.strings['stats_label'],
82
+ value: this.model.get('smush')
83
  });
84
 
85
+ this.$el.append(html);
86
+
87
+ this.model.fetch();
88
+ this.views.render();
89
+
90
+ return this;
91
  }
92
+ });
93
 
94
+ })(jQuery, _);
assets/js/ui.js DELETED
@@ -1,23 +0,0 @@
1
- /**
2
- * Bulk Page UI/UX
3
- *
4
- */
5
- jQuery(function ($) {
6
-
7
- /**
8
- * Remove the quick setup dialog
9
- */
10
- function remove_dialog() {
11
- $('dialog#smush-quick-setup').remove();
12
- }
13
-
14
- //Show the Quick Setup Dialog
15
- if ($('#smush-quick-setup').size() > 0) {
16
- WDP.showOverlay("#smush-quick-setup", {
17
- title: wp_smush_msgs.quick_setup_title,
18
- class: 'no-close wp-smush-overlay'
19
- });
20
- remove_dialog();
21
- }
22
- }
23
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/wp-smushit-admin.js CHANGED
@@ -41,17 +41,6 @@ var membership_validity = function (data) {
41
  }
42
  }
43
  };
44
- /**
45
- * Resize Background width
46
- */
47
- var resize_width = function () {
48
- var width = jQuery('.wp-smush-pro-for-free').width();
49
- if ('undefined' != typeof ( width ) && 500 < width) {
50
- jQuery('.wpmud .wp-smush-pro-adv').css({'background-size': '500px'});
51
- } else {
52
- jQuery('.wpmud .wp-smush-pro-adv').css({'background-size': '90%'});
53
- }
54
- };
55
 
56
  var remove_element = function (el, timeout) {
57
  if (typeof timeout == 'undefined') {
@@ -220,8 +209,17 @@ jQuery(function ($) {
220
  this.hide_loader();
221
  this.request.done(function (response) {
222
  if (typeof response.data != 'undefined') {
223
- //Append the smush stats or error
224
- self.$status.html(response.data);
 
 
 
 
 
 
 
 
 
225
 
226
  //Check whether to show membership validity notice or not
227
  membership_validity(response.data);
@@ -235,12 +233,6 @@ jQuery(function ($) {
235
  self.$status.html(response.data.error_msg);
236
  self.$status.show();
237
  }
238
- if (response.data.status) {
239
- self.$status.html(response.data.status);
240
- }
241
- //Check if stats div exists
242
- var parent = self.$status.parent();
243
- var stats_div = parent.find('.smush-stats-wrapper');
244
  if ('undefined' != stats_div && stats_div.length) {
245
  stats_div.replaceWith(response.data.stats);
246
  } else {
@@ -519,8 +511,13 @@ jQuery(function ($) {
519
  self.update_remaining_count();
520
  } else {
521
 
522
- if (self.is_bulk && res.success) {
523
- self.update_progress(res);
 
 
 
 
 
524
  }
525
  }
526
  self.single_done();
@@ -697,9 +694,13 @@ jQuery(function ($) {
697
  //Hide stats
698
  $('.smush-stats-wrapper').hide();
699
 
700
- var mode = '';
701
  if( 'smush_restore_image' == smush_action ) {
702
- mode = window.location.search.indexOf('item') > -1 ? 'grid' : 'list';
 
 
 
 
703
  }
704
 
705
  //Get the image ID and nonce
@@ -723,9 +724,15 @@ jQuery(function ($) {
723
  //reset all functionality
724
  enable_links(current_button);
725
 
726
- if (r.success && 'undefined' != typeof( r.data.button )) {
727
- //Show the smush button, and remove stats and restore option
728
- current_button.parents().eq(1).html(r.data.button);
 
 
 
 
 
 
729
  } else {
730
  if (r.data.message) {
731
  //show error
@@ -917,6 +924,11 @@ jQuery(function ($) {
917
  wp_smushit_data.size_after = 'undefined' != typeof r.data.size_after ? r.data.size_after : wp_smushit_data.size_after;
918
  wp_smushit_data.savings_resize = 'undefined' != typeof r.data.savings_resize ? r.data.savings_resize : wp_smushit_data.savings_resize;
919
  wp_smushit_data.savings_conversion = 'undefined' != typeof r.data.savings_conversion ? r.data.savings_conversion : wp_smushit_data.savings_conversion;
 
 
 
 
 
920
  }
921
 
922
  var smush_percent = ( wp_smushit_data.count_smushed / wp_smushit_data.count_total ) * 100;
@@ -1005,6 +1017,8 @@ jQuery(function ($) {
1005
  },
1006
  async: false
1007
  });
 
 
1008
  return res;
1009
  };
1010
  /**
@@ -1336,7 +1350,7 @@ jQuery(function ($) {
1336
  $('.wp-smush-savings .wp-smush-stats-human').html(formatBytes(wp_smushit_data.savings_bytes, 1));
1337
 
1338
  //Update the savings percent
1339
- wp_smushit_data.savings_percent = precise_round(( parseInt(wp_smushit_data.savings_bytes) / parseInt(wp_smushit_data.size_before) ) * 100, 1);
1340
  $('.wp-smush-savings .wp-smush-stats-percent').html(wp_smushit_data.savings_percent);
1341
 
1342
  //Update Savings in share message
@@ -1529,6 +1543,7 @@ jQuery(function ($) {
1529
 
1530
  //Check, if limit is exceeded for free version
1531
  if (typeof res.data !== "undefined" && res.data.error == 'dir_smush_limit_exceeded') {
 
1532
  //Show error, Bulk Smush limit exceeded
1533
  directory_smush_finished('wp-smush-dir-limit');
1534
  return;
@@ -1718,7 +1733,7 @@ jQuery(function ($) {
1718
  e.preventDefault();
1719
  //Replace the `+` with a `-`
1720
  var slide_symbol = $(this).find('.stats-toggle');
1721
- $(this).parents().eq(1).find('.smush-stats-wrapper').slideToggle();
1722
  slide_symbol.text(slide_symbol.text() == '+' ? '-' : '+');
1723
 
1724
 
@@ -1766,6 +1781,11 @@ jQuery(function ($) {
1766
  var current_button = $(this);
1767
  var smush_action = 'smush_restore_image';
1768
  process_smush_action(e, current_button, smush_action, 'restore');
 
 
 
 
 
1769
  });
1770
 
1771
  /** Resmush: Media Library **/
@@ -1972,13 +1992,17 @@ jQuery(function ($) {
1972
  wp_smushit_data.savings_resize = 'undefined' != typeof stats.savings_resize ? parseInt(wp_smushit_data.savings_resize) + stats.savings_resize : wp_smushit_data.savings_resize;
1973
  wp_smushit_data.savings_conversion = 'undefined' != typeof stats.savings_conversion ? parseInt(wp_smushit_data.savings_conversion) + stats.savings_conversion : wp_smushit_data.savings_conversion;
1974
  //Add directory smush stats
1975
- if( 'undefined' != typeof ( wp_smushit_data.savings_dir_smush.orig_size ) ) {
1976
  wp_smushit_data.size_before = 'undefined' != typeof wp_smushit_data.savings_dir_smush ? parseInt(wp_smushit_data.size_before) + parseInt(wp_smushit_data.savings_dir_smush.orig_size) : wp_smushit_data.size_before;
1977
  wp_smushit_data.size_after = 'undefined' != typeof wp_smushit_data.savings_dir_smush ? parseInt(wp_smushit_data.size_after) + parseInt(wp_smushit_data.savings_dir_smush.image_size) : wp_smushit_data.size_after;
1978
  }
1979
 
1980
  wp_smushit_data.count_resize = 'undefined' != typeof stats.count_resize ? parseInt( wp_smushit_data.count_resize ) + stats.count_resize : wp_smushit_data.count_resize;
1981
  }
 
 
 
 
1982
  update_stats();
1983
  }
1984
  });
@@ -2112,15 +2136,6 @@ jQuery(function ($) {
2112
  return false;
2113
  });
2114
 
2115
- //Adjust background image size if required
2116
- if ($('.wp-smush-pro-for-free').length) {
2117
- //On Page load
2118
- resize_width();
2119
- //Adjust background image
2120
- $(window).resize(function () {
2121
- resize_width();
2122
- });
2123
- }
2124
  //Handle Re-check button functionality
2125
  $("#wp-smush-revalidate-member").on('click', function (e) {
2126
  e.preventDefault();
@@ -2186,10 +2201,14 @@ jQuery(function ($) {
2186
  //Display the loader
2187
  $('button.dir-smush-button-wrap span.spinner').addClass('is-active');
2188
 
 
2189
  $(".wp-smush-list-dialog .content").fileTree({
2190
- script: getDirectoryList,
2191
- multiFolder: false
2192
- });
 
 
 
2193
 
2194
  });
2195
 
@@ -2252,7 +2271,7 @@ jQuery(function ($) {
2252
  close_dialog();
2253
 
2254
  //Show Scan result
2255
- $('.wp-smush-scan-result').removeClass('hidden');
2256
  }).done(function (res) {
2257
 
2258
  //If there was no image list, return
@@ -2353,7 +2372,7 @@ jQuery(function ($) {
2353
  e.preventDefault();
2354
 
2355
  var self = $(this);
2356
- var parent = self.parent();
2357
 
2358
  //Hide the link
2359
  self.hide();
@@ -2384,6 +2403,12 @@ jQuery(function ($) {
2384
  parent.siblings('li.wp-smush-image-ul:first').prepend('<hr />');
2385
  }
2386
  parent.remove();
 
 
 
 
 
 
2387
  }
2388
  });
2389
  });
41
  }
42
  }
43
  };
 
 
 
 
 
 
 
 
 
 
 
44
 
45
  var remove_element = function (el, timeout) {
46
  if (typeof timeout == 'undefined') {
209
  this.hide_loader();
210
  this.request.done(function (response) {
211
  if (typeof response.data != 'undefined') {
212
+
213
+ //Check if stats div exists
214
+ var parent = self.$status.parent();
215
+ var stats_div = parent.find('.smush-stats-wrapper');
216
+
217
+ //If we've updated status, replace the content
218
+ if (response.data.status) {
219
+ //remove Links
220
+ parent.find('.smush-status-links').remove()
221
+ self.$status.replaceWith(response.data.status);
222
+ }
223
 
224
  //Check whether to show membership validity notice or not
225
  membership_validity(response.data);
233
  self.$status.html(response.data.error_msg);
234
  self.$status.show();
235
  }
 
 
 
 
 
 
236
  if ('undefined' != stats_div && stats_div.length) {
237
  stats_div.replaceWith(response.data.stats);
238
  } else {
511
  self.update_remaining_count();
512
  } else {
513
 
514
+ if (self.is_bulk) {
515
+ if (res.success) {
516
+ self.update_progress(res);
517
+ } else if (self.ids.length == 0) {
518
+ //Sync stats anyway
519
+ self.sync_stats();
520
+ }
521
  }
522
  }
523
  self.single_done();
694
  //Hide stats
695
  $('.smush-stats-wrapper').hide();
696
 
697
+ var mode = 'grid';
698
  if( 'smush_restore_image' == smush_action ) {
699
+ if( $(document).find('div.media-modal.wp-core-ui').length > 0 ) {
700
+ mode = 'grid';
701
+ }else {
702
+ mode = window.location.search.indexOf('item') > -1 ? 'grid' : 'list';
703
+ }
704
  }
705
 
706
  //Get the image ID and nonce
724
  //reset all functionality
725
  enable_links(current_button);
726
 
727
+ if (r.success && 'undefined' != typeof(r.data.button)) {
728
+ //Replace in immediate parent for nextgen
729
+ if ('undefined' != typeof (this.data) && this.data.indexOf('nextgen') > -1) {
730
+ //Show the smush button, and remove stats and restore option
731
+ current_button.parent().html(r.data.button);
732
+ } else {
733
+ //Show the smush button, and remove stats and restore option
734
+ current_button.parents().eq(1).html(r.data.button);
735
+ }
736
  } else {
737
  if (r.data.message) {
738
  //show error
924
  wp_smushit_data.size_after = 'undefined' != typeof r.data.size_after ? r.data.size_after : wp_smushit_data.size_after;
925
  wp_smushit_data.savings_resize = 'undefined' != typeof r.data.savings_resize ? r.data.savings_resize : wp_smushit_data.savings_resize;
926
  wp_smushit_data.savings_conversion = 'undefined' != typeof r.data.savings_conversion ? r.data.savings_conversion : wp_smushit_data.savings_conversion;
927
+ wp_smushit_data.count_resize = 'undefined' != typeof r.data.count_resize ? r.data.count_resize : wp_smushit_data.count_resize;
928
+ }
929
+
930
+ if( 'nextgen' == scan_type ) {
931
+ wp_smushit_data.bytes = parseInt( wp_smushit_data.size_before ) - parseInt( wp_smushit_data.size_after )
932
  }
933
 
934
  var smush_percent = ( wp_smushit_data.count_smushed / wp_smushit_data.count_total ) * 100;
1017
  },
1018
  async: false
1019
  });
1020
+ //Update the button text
1021
+ $('button.wp-smush-select-dir').html(wp_smush_msgs.add_dir);
1022
  return res;
1023
  };
1024
  /**
1350
  $('.wp-smush-savings .wp-smush-stats-human').html(formatBytes(wp_smushit_data.savings_bytes, 1));
1351
 
1352
  //Update the savings percent
1353
+ wp_smushit_data.savings_percent = parseInt(wp_smushit_data.savings_bytes) > 0 ? precise_round(( parseInt(wp_smushit_data.savings_bytes) / parseInt(wp_smushit_data.size_before) ) * 100, 1) : 0;
1354
  $('.wp-smush-savings .wp-smush-stats-percent').html(wp_smushit_data.savings_percent);
1355
 
1356
  //Update Savings in share message
1543
 
1544
  //Check, if limit is exceeded for free version
1545
  if (typeof res.data !== "undefined" && res.data.error == 'dir_smush_limit_exceeded') {
1546
+ first_child.removeClass('processed');
1547
  //Show error, Bulk Smush limit exceeded
1548
  directory_smush_finished('wp-smush-dir-limit');
1549
  return;
1733
  e.preventDefault();
1734
  //Replace the `+` with a `-`
1735
  var slide_symbol = $(this).find('.stats-toggle');
1736
+ $(this).parents().eq(2).find('.smush-stats-wrapper').slideToggle();
1737
  slide_symbol.text(slide_symbol.text() == '+' ? '-' : '+');
1738
 
1739
 
1781
  var current_button = $(this);
1782
  var smush_action = 'smush_restore_image';
1783
  process_smush_action(e, current_button, smush_action, 'restore');
1784
+ //Change the class oa parent div ( Level 2 )
1785
+ var parent = current_button.parents().eq(1);
1786
+ if (parent.hasClass('smushed')) {
1787
+ parent.removeClass('smushed').addClass('unsmushed');
1788
+ }
1789
  });
1790
 
1791
  /** Resmush: Media Library **/
1992
  wp_smushit_data.savings_resize = 'undefined' != typeof stats.savings_resize ? parseInt(wp_smushit_data.savings_resize) + stats.savings_resize : wp_smushit_data.savings_resize;
1993
  wp_smushit_data.savings_conversion = 'undefined' != typeof stats.savings_conversion ? parseInt(wp_smushit_data.savings_conversion) + stats.savings_conversion : wp_smushit_data.savings_conversion;
1994
  //Add directory smush stats
1995
+ if( 'undefined' != typeof ( wp_smushit_data.savings_dir_smush ) && 'undefined' != typeof ( wp_smushit_data.savings_dir_smush.orig_size ) ) {
1996
  wp_smushit_data.size_before = 'undefined' != typeof wp_smushit_data.savings_dir_smush ? parseInt(wp_smushit_data.size_before) + parseInt(wp_smushit_data.savings_dir_smush.orig_size) : wp_smushit_data.size_before;
1997
  wp_smushit_data.size_after = 'undefined' != typeof wp_smushit_data.savings_dir_smush ? parseInt(wp_smushit_data.size_after) + parseInt(wp_smushit_data.savings_dir_smush.image_size) : wp_smushit_data.size_after;
1998
  }
1999
 
2000
  wp_smushit_data.count_resize = 'undefined' != typeof stats.count_resize ? parseInt( wp_smushit_data.count_resize ) + stats.count_resize : wp_smushit_data.count_resize;
2001
  }
2002
+ //Smush Notice
2003
+ if ($('.bulk-smush-wrapper .wp-smush-remaining-count').length && 'undefined' != typeof wp_smushit_data.unsmushed ) {
2004
+ $('.bulk-smush-wrapper .wp-smush-remaining-count').html(wp_smushit_data.unsmushed.length);
2005
+ }
2006
  update_stats();
2007
  }
2008
  });
2136
  return false;
2137
  });
2138
 
 
 
 
 
 
 
 
 
 
2139
  //Handle Re-check button functionality
2140
  $("#wp-smush-revalidate-member").on('click', function (e) {
2141
  e.preventDefault();
2201
  //Display the loader
2202
  $('button.dir-smush-button-wrap span.spinner').addClass('is-active');
2203
 
2204
+ //Display File tree for Directory Smush
2205
  $(".wp-smush-list-dialog .content").fileTree({
2206
+ script: getDirectoryList,
2207
+ multiFolder: false
2208
+ },
2209
+ function () {
2210
+ }
2211
+ );
2212
 
2213
  });
2214
 
2271
  close_dialog();
2272
 
2273
  //Show Scan result
2274
+ $('.wp-smush-scan-result').removeClass('hidden').show();
2275
  }).done(function (res) {
2276
 
2277
  //If there was no image list, return
2372
  e.preventDefault();
2373
 
2374
  var self = $(this);
2375
+ var parent = self.parents().eq(1);
2376
 
2377
  //Hide the link
2378
  self.hide();
2403
  parent.siblings('li.wp-smush-image-ul:first').prepend('<hr />');
2404
  }
2405
  parent.remove();
2406
+
2407
+ //Remove the bottom bulk smsuh button if there are no more directories left in scan results
2408
+ if( 0 == $('ul.wp-smush-image-list li').length ) {
2409
+ $('div.wp-smush-all-button-wrap.bottom').hide();
2410
+ $('div.wp-smush-scan-result').hide();
2411
+ }
2412
  }
2413
  });
2414
  });
assets/shared-ui-2/css/admin.min.css ADDED
@@ -0,0 +1 @@
 
1
+ @import url(https://fonts.googleapis.com/css?family=Roboto+Condensed:400,500,700|Roboto:400,500,700);.sui-2-1-0 .sui-checkbox input,.sui-2-1-0 .sui-radio input,.sui-2-1-0 .sui-toggle input[type=checkbox],.sui-2-1-0 .sui-upload-group input[type=file],.sui-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}.sui-2-1-0 .sui-hidden{display:none!important}.sui-2-1-0 .sui-block-content-center{text-align:center}.sui-2-1-0 .sui-image{display:block;height:auto;max-width:100%}.sui-2-1-0 .sui-image-center{margin-right:auto;margin-left:auto}.sui-2-1-0 .sui-actions-left{margin-left:10px;margin-right:auto}.sui-2-1-0 .sui-actions-left,.sui-2-1-0 .sui-actions-right{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.sui-2-1-0 .sui-actions-right{margin-left:auto;margin-right:0}.sui-2-1-0 .sui-space-between{-ms-flex-pack:justify;justify-content:space-between}.sui-2-1-0 .sui-align-start{-ms-flex-pack:start;justify-content:flex-start}.sui-2-1-0 .sui-align-end{-ms-flex-pack:end;justify-content:flex-end}.sui-2-1-0 .sui-success{color:#1abc9c}.sui-2-1-0 .sui-warning{color:#fecf2f}.sui-2-1-0 .sui-error{color:#ff7f83}.sui-2-1-0 .sui-info{color:#17a8e3}.sui-2-1-0 .sui-no-margin{margin:0!important}.sui-2-1-0 .sui-no-margin-top{margin-top:0!important}.sui-2-1-0 .sui-no-margin-bottom{margin-bottom:0!important}.sui-2-1-0 .sui-no-margin-left{margin-left:0!important}.sui-2-1-0 .sui-no-margin-right{margin-right:0!important}.sui-2-1-0 .sui-no-padding{padding:0!important}.sui-2-1-0 .sui-no-padding-top{padding-top:0!important}.sui-2-1-0 .sui-no-padding-bottom{padding-bottom:0!important}.sui-2-1-0 .sui-no-padding-left{padding-left:0!important}.sui-2-1-0 .sui-no-padding-right{padding-right:0!important}.sui-2-1-0 .sui-margin{margin:30px!important}.sui-2-1-0 .sui-margin-top{margin-top:30px!important}.sui-2-1-0 .sui-margin-bottom{margin-bottom:30px!important}.sui-2-1-0 .sui-margin-left{margin-left:30px!important}.sui-2-1-0 .sui-margin-right{margin-right:30px!important}.sui-2-1-0 .sui-padding{padding:30px!important}.sui-2-1-0 .sui-padding-top{padding-top:30px!important}.sui-2-1-0 .sui-padding-bottom{padding-bottom:30px!important}.sui-2-1-0 .sui-padding-left{padding-left:30px!important}.sui-2-1-0 .sui-padding-right{padding-right:30px!important}@media (max-width:479px){.sui-hidden-xs{display:none!important}}@media (min-width:480px) and (max-width:782px){.sui-hidden-sm{display:none!important}}@media (min-width:783px) and (max-width:1199px){.sui-hidden-md{display:none!important}}@media (min-width:1200px){.sui-hidden-lg{display:none!important}}.sui-2-1-0 .sui-fade-in{animation:fadeIn .3s ease-in forwards}.sui-2-1-0 .sui-fade-out{animation:fadeOut .3s ease-in forwards}.sui-2-1-0 .sui-bounce-in{animation:bounceInJiggle .8s ease-in forwards}.sui-2-1-0 .sui-bounce-out{animation:bounceOutJiggle .6s ease-out forwards}@keyframes bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes bounceInJiggle{0%{transform:translateY(-200%) scale(1.5);opacity:0}30%{opacity:1}58%{transform:translateY(0) rotate(1deg) scale(1);opacity:1}72%{transform:translateY(-30px) rotate(-1deg)}80%{transform:translateY(0) rotate(.5deg)}to{transform:translateY(0) rotate(0deg)}}@keyframes bounceOutJiggle{0%{transform:translateY(0)}10%{transform:translateY(-10px) rotate(-.5deg)}30%{transform:translateY(20px) rotate(8deg)}70%{opacity:1}90%{transform:translateY(300%) translateX(40px) rotate(35deg);opacity:0}to{display:none}}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.sui-2-1-0 .sui-wrap{font-family:Roboto,Arial,sans-serif;font-weight:400;font-size:15px;line-height:30px;color:#666;letter-spacing:-.025em;text-rendering:optimizeLegibility;margin:30px 30px 0 10px}@media (max-width:782px){.sui-2-1-0 .sui-wrap{margin:20px 10px 0 0}}.sui-2-1-0 h1,.sui-2-1-0 h2,.sui-2-1-0 h3,.sui-2-1-0 h4,.sui-2-1-0 h5,.sui-2-1-0 h6{display:block;margin:.5em auto;padding:0;line-height:30px;color:#333;font-weight:700;font-family:Roboto Condensed,Roboto,Arial,sans-serif}.sui-2-1-0 h1{font-size:32px;line-height:40px;color:#333;margin:0}.sui-2-1-0 h2{font-size:22px;line-height:35px}.sui-2-1-0 h3{font-size:18px;line-height:40px}.sui-2-1-0 h4,.sui-2-1-0 h5,.sui-2-1-0 h6,.sui-2-1-0 p{font-size:15px}.sui-2-1-0 p{font-family:Roboto,Arial,sans-serif;font-weight:400;line-height:30px;color:#666;letter-spacing:-.025em;text-rendering:optimizeLegibility}.sui-2-1-0 p:first-child{margin-top:0}.sui-2-1-0 p:last-child{margin-bottom:0}.sui-2-1-0 p small{font-size:13px;line-height:22px;color:#888}.sui-2-1-0 a{text-decoration:none;color:#17a8e3;font-weight:500;outline-color:transparent;outline-style:none;box-shadow:none}.sui-2-1-0 a:active:not(.sui-button),.sui-2-1-0 a:focus:not(.sui-button),.sui-2-1-0 a:hover:not(.sui-button){color:#0a9bd6}.sui-2-1-0 a.disabled{pointer-events:none}.sui-2-1-0 a.disabled:active,.sui-2-1-0 a.disabled:focus,.sui-2-1-0 a.disabled:hover{color:#888;cursor:default}.sui-2-1-0 code,.sui-2-1-0 pre{font-weight:500;font-size:13px;line-height:18px;color:#333;background-color:#f8f8f8;border:1px solid #e6e6e6;border-radius:3px;margin:0;padding:10px 15px;white-space:pre;overflow:auto;max-width:100%;vertical-align:middle;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.sui-2-1-0 code{display:inline-block;padding:2px 5px}.sui-2-1-0 b,.sui-2-1-0 strong{font-weight:500}.sui-2-1-0 dfn{font-style:normal;font-weight:400;border-bottom:1px dotted #888}.sui-2-1-0 .sui-checkbox span:before,.sui-2-1-0 .sui-dialog-close:before,.sui-2-1-0 .sui-listing li:before,.sui-2-1-0 .sui-notice-top p:before,.sui-2-1-0 .sui-notice p:before,.sui-2-1-0 .sui-radio span:before,.sui-2-1-0 [class*=sui-icon-]:after,.sui-2-1-0 [class*=sui-icon-]:before{font-family:WPMU-DEV-Icon!important;speak:none;font-size:1em;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;text-rendering:auto;display:inline-block;color:#888;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@font-face{font-family:WPMU-DEV-Icon;src:url(../fonts/WPMU-DEV-Icon.eot);src:url(../fonts/WPMU-DEV-Icon.eot) format("embedded-opentype"),url(../fonts/WPMU-DEV-Icon.ttf) format("truetype"),url(../fonts/WPMU-DEV-Icon.woff) format("woff"),url(../fonts/WPMU-DEV-Icon.woff2) format("woff2"),url(../fonts/WPMU-DEV-Icon.svg) format("svg");font-weight:400;font-style:normal}.sui-2-1-0 .sui-loading:before{animation:spin 1.3s linear infinite}.sui-2-1-0 [class*=sui-icon-]{display:inline-block}.sui-2-1-0 [class*=sui-icon-].sui-xl:before{font-size:30px}.sui-2-1-0 [class*=sui-icon-].sui-lg:before{font-size:20px}.sui-2-1-0 [class*=sui-icon-].sui-md:before{font-size:16px}.sui-2-1-0 [class*=sui-icon-].sui-sm:before{font-size:12px}.sui-2-1-0 [class*=sui-icon-].sui-error:before,.sui-2-1-0 [class*=sui-icon-].sui-info:before,.sui-2-1-0 [class*=sui-icon-].sui-success:before,.sui-2-1-0 [class*=sui-icon-].sui-warning:before{color:inherit}.sui-2-1-0 [class*=sui-icon-].sui-fw{width:1.8em;text-align:center;min-height:1em}.sui-2-1-0 .sui-icon-24-hour-support:before{content:"\C1"}.sui-2-1-0 .sui-icon-2FA:before{content:"\E912"}.sui-2-1-0 .sui-icon-IP:before{content:"\E910"}.sui-2-1-0 .sui-icon-ab-testing:before{content:"\BB"}.sui-2-1-0 .sui-icon-academy:before{content:"\3C0"}.sui-2-1-0 .sui-icon-accounts-billing:before{content:"\E914"}.sui-2-1-0 .sui-icon-alert:before{content:"X"}.sui-2-1-0 .sui-icon-align-center:before{content:"^"}.sui-2-1-0 .sui-icon-align-justify:before{content:"#"}.sui-2-1-0 .sui-icon-align-left:before{content:"%"}.sui-2-1-0 .sui-icon-align-right:before{content:"&"}.sui-2-1-0 .sui-icon-animation-video:before{content:"F"}.sui-2-1-0 .sui-icon-annotate:before{content:"\B4"}.sui-2-1-0 .sui-icon-archive:before{content:"b"}.sui-2-1-0 .sui-icon-arrow-down:before{content:"\C2"}.sui-2-1-0 .sui-icon-arrow-left:before{content:"\F8FF"}.sui-2-1-0 .sui-icon-arrow-location:before{content:"M"}.sui-2-1-0 .sui-icon-arrow-pointer-cursor:before{content:"N"}.sui-2-1-0 .sui-icon-arrow-return-back:before{content:"R"}.sui-2-1-0 .sui-icon-arrow-right:before{content:"\AF"}.sui-2-1-0 .sui-icon-arrow-skip-back:before{content:"\E916"}.sui-2-1-0 .sui-icon-arrow-skip-end:before{content:"\E919"}.sui-2-1-0 .sui-icon-arrow-skip-forward:before{content:"\E917"}.sui-2-1-0 .sui-icon-arrow-skip-start:before{content:"\E918"}.sui-2-1-0 .sui-icon-arrow-up:before{content:"\D4"}.sui-2-1-0 .sui-icon-arrows-compress:before{content:"\2265"}.sui-2-1-0 .sui-icon-arrows-expand:before{content:"\AC"}.sui-2-1-0 .sui-icon-arrows-in:before{content:"\2264"}.sui-2-1-0 .sui-icon-arrows-out:before{content:"\2DA"}.sui-2-1-0 .sui-icon-asterisk:before{content:"*"}.sui-2-1-0 .sui-icon-at-sign:before{content:"@"}.sui-2-1-0 .sui-icon-audio-sound:before{content:"\E9AE"}.sui-2-1-0 .sui-icon-automate:before{content:"\152"}.sui-2-1-0 .sui-icon-blog:before{content:"\E90D"}.sui-2-1-0 .sui-icon-bold:before{content:"B"}.sui-2-1-0 .sui-icon-book:before{content:"\2206"}.sui-2-1-0 .sui-icon-book-bookmark:before{content:"\2D9"}.sui-2-1-0 .sui-icon-bookmark:before{content:"\221A"}.sui-2-1-0 .sui-icon-brush:before{content:"~"}.sui-2-1-0 .sui-icon-buddypress:before{content:"\E90C"}.sui-2-1-0 .sui-icon-calendar:before{content:"\220F"}.sui-2-1-0 .sui-icon-camera:before{content:"\D8"}.sui-2-1-0 .sui-icon-check:before{content:"("}.sui-2-1-0 .sui-icon-check-tick:before{content:"_"}.sui-2-1-0 .sui-icon-chevron-down:before{content:"\131"}.sui-2-1-0 .sui-icon-chevron-left:before{content:"\D3"}.sui-2-1-0 .sui-icon-chevron-right:before{content:"\2DC"}.sui-2-1-0 .sui-icon-chevron-up:before{content:"\2DD"}.sui-2-1-0 .sui-icon-clipboard-notes:before{content:"\BF"}.sui-2-1-0 .sui-icon-clock:before{content:","}.sui-2-1-0 .sui-icon-close:before{content:")"}.sui-2-1-0 .sui-icon-cloud:before{content:"\2122"}.sui-2-1-0 .sui-icon-cloud-migration:before{content:"\E905"}.sui-2-1-0 .sui-icon-cloudflare:before{content:"\D0"}.sui-2-1-0 .sui-icon-code:before{content:":"}.sui-2-1-0 .sui-icon-coffee-cup:before{content:"\E96B"}.sui-2-1-0 .sui-icon-color-pick-eyedropper:before{content:"\A5"}.sui-2-1-0 .sui-icon-comment:before{content:"\A7"}.sui-2-1-0 .sui-icon-comment-2:before{content:"\AA"}.sui-2-1-0 .sui-icon-comments:before{content:"\B6"}.sui-2-1-0 .sui-icon-community-people:before{content:"\2018"}.sui-2-1-0 .sui-icon-compass:before{content:"\2C6"}.sui-2-1-0 .sui-icon-credit-card:before{content:"c"}.sui-2-1-0 .sui-icon-crop:before{content:"C"}.sui-2-1-0 .sui-icon-cross-close:before{content:"+"}.sui-2-1-0 .sui-icon-crown:before{content:"\A1"}.sui-2-1-0 .sui-icon-dashboard:before{content:"\E9B2"}.sui-2-1-0 .sui-icon-dashboard-settings:before{content:"\E901"}.sui-2-1-0 .sui-icon-defender:before{content:"\B7"}.sui-2-1-0 .sui-icon-devman:before{content:"\20AC"}.sui-2-1-0 .sui-icon-dislike:before{content:"k"}.sui-2-1-0 .sui-icon-dollar:before{content:"$"}.sui-2-1-0 .sui-icon-download:before{content:"\E93B"}.sui-2-1-0 .sui-icon-download-cloud:before{content:"\A3"}.sui-2-1-0 .sui-icon-eye:before{content:"e"}.sui-2-1-0 .sui-icon-eye-hide:before{content:"q"}.sui-2-1-0 .sui-icon-fast-forward:before{content:">"}.sui-2-1-0 .sui-icon-filter:before{content:"z"}.sui-2-1-0 .sui-icon-finger-point:before{content:"\2248"}.sui-2-1-0 .sui-icon-finger-swipe:before{content:"\2203"}.sui-2-1-0 .sui-icon-first-aid:before{content:"\E93F"}.sui-2-1-0 .sui-icon-flag:before{content:"|"}.sui-2-1-0 .sui-icon-folder:before{content:"\2D8"}.sui-2-1-0 .sui-icon-forminator:before{content:"\E908"}.sui-2-1-0 .sui-icon-forminator-2:before{content:"\E907"}.sui-2-1-0 .sui-icon-gallery-slider:before{content:"\F7"}.sui-2-1-0 .sui-icon-google-analytics:before{content:"\E5"}.sui-2-1-0 .sui-icon-graph-bar:before{content:"\C7"}.sui-2-1-0 .sui-icon-graph-bar-2:before{content:"\2DB"}.sui-2-1-0 .sui-icon-heart:before{content:"K"}.sui-2-1-0 .sui-icon-help-support:before{content:"H"}.sui-2-1-0 .sui-icon-home:before{content:"J"}.sui-2-1-0 .sui-icon-hub:before{content:"\FB02"}.sui-2-1-0 .sui-icon-hummingbird:before{content:"\B0"}.sui-2-1-0 .sui-icon-hustle:before{content:"\2014"}.sui-2-1-0 .sui-icon-indent-less:before{content:"\201D"}.sui-2-1-0 .sui-icon-indent-more:before{content:"\2019"}.sui-2-1-0 .sui-icon-infinity:before{content:"V"}.sui-2-1-0 .sui-icon-info:before{content:"I"}.sui-2-1-0 .sui-icon-italic:before{content:"{"}.sui-2-1-0 .sui-icon-jobs-pros-search:before{content:"\E90E"}.sui-2-1-0 .sui-icon-key:before{content:"\25CA"}.sui-2-1-0 .sui-icon-laptop:before{content:"\AB"}.sui-2-1-0 .sui-icon-layers:before{content:"\E6"}.sui-2-1-0 .sui-icon-layout:before{content:"\A9"}.sui-2-1-0 .sui-icon-layout-grid:before{content:"\221E"}.sui-2-1-0 .sui-icon-lightbulb:before{content:"L"}.sui-2-1-0 .sui-icon-lightbulb-line:before{content:"\E913"}.sui-2-1-0 .sui-icon-like:before{content:"j"}.sui-2-1-0 .sui-icon-link:before{content:"5"}.sui-2-1-0 .sui-icon-list:before{content:"`"}.sui-2-1-0 .sui-icon-list-bullet:before{content:"8"}.sui-2-1-0 .sui-icon-list-number:before{content:"7"}.sui-2-1-0 .sui-icon-loader:before{content:"\E9BE"}.sui-2-1-0 .sui-icon-location-marker:before{content:"l"}.sui-2-1-0 .sui-icon-lock:before{content:"9"}.sui-2-1-0 .sui-icon-magnifying-glass-search:before{content:"\BA"}.sui-2-1-0 .sui-icon-magnifying-search-glass-love:before{content:"\2022"}.sui-2-1-0 .sui-icon-mail:before{content:"m"}.sui-2-1-0 .sui-icon-map:before{content:"4"}.sui-2-1-0 .sui-icon-megaphone:before{content:"\C5"}.sui-2-1-0 .sui-icon-microphone-audio:before{content:"\2030"}.sui-2-1-0 .sui-icon-minus:before{content:"-"}.sui-2-1-0 .sui-icon-mobile:before{content:"\201C"}.sui-2-1-0 .sui-icon-mobile-signal:before{content:"\201B"}.sui-2-1-0 .sui-icon-monitor:before{content:"\\"}.sui-2-1-0 .sui-icon-more:before{content:"\2026"}.sui-2-1-0 .sui-icon-mouse-scroll:before{content:"\DF"}.sui-2-1-0 .sui-icon-news-paper:before{content:"\2211"}.sui-2-1-0 .sui-icon-notification:before{content:"n"}.sui-2-1-0 .sui-icon-notification-count:before{content:"\E900"}.sui-2-1-0 .sui-icon-open-new-window:before{content:"\E909"}.sui-2-1-0 .sui-icon-page:before{content:"\D2"}.sui-2-1-0 .sui-icon-page-multiple:before{content:"\E7"}.sui-2-1-0 .sui-icon-page-pdf:before{content:"\C6"}.sui-2-1-0 .sui-icon-page-search:before{content:"\DA"}.sui-2-1-0 .sui-icon-paint-bucket:before{content:"\222B"}.sui-2-1-0 .sui-icon-paperclip:before{content:"A"}.sui-2-1-0 .sui-icon-pause:before{content:"o"}.sui-2-1-0 .sui-icon-paypal:before{content:"Y"}.sui-2-1-0 .sui-icon-pencil:before{content:"/"}.sui-2-1-0 .sui-icon-performance:before{content:"\E903"}.sui-2-1-0 .sui-icon-photo-picture:before{content:"D"}.sui-2-1-0 .sui-icon-play:before{content:"p"}.sui-2-1-0 .sui-icon-plug-connected:before{content:"\E90B"}.sui-2-1-0 .sui-icon-plug-disconnected:before{content:"\E90A"}.sui-2-1-0 .sui-icon-plugin-2:before{content:"O"}.sui-2-1-0 .sui-icon-plugins:before{content:"P"}.sui-2-1-0 .sui-icon-plus:before{content:"="}.sui-2-1-0 .sui-icon-power-on-off:before{content:"\E904"}.sui-2-1-0 .sui-icon-price-tag:before{content:"\2C7"}.sui-2-1-0 .sui-icon-profile-female:before{content:"\192"}.sui-2-1-0 .sui-icon-profile-male:before{content:"\B5"}.sui-2-1-0 .sui-icon-progress:before{content:"\E9B1"}.sui-2-1-0 .sui-icon-pulse:before{content:"\201E"}.sui-2-1-0 .sui-icon-puzzle:before{content:";\A}\A\A"}.sui-2-1-0 .sui-icon-question:before{content:"?"}.sui-2-1-0 .sui-icon-quote:before{content:";"}.sui-2-1-0 .sui-icon-quote-2:before{content:"'"}.sui-2-1-0 .sui-icon-refresh:before{content:"E"}.sui-2-1-0 .sui-icon-reply:before{content:"r"}.sui-2-1-0 .sui-icon-rocket-launch:before{content:"\E9BF"}.sui-2-1-0 .sui-icon-security-thumb-print:before{content:"\E90F"}.sui-2-1-0 .sui-icon-settings-slider-control:before{content:"\153"}.sui-2-1-0 .sui-icon-share:before{content:"s"}.sui-2-1-0 .sui-icon-sheild-badge:before{content:"\E96A"}.sui-2-1-0 .sui-icon-shipper-anchor:before{content:"\E906"}.sui-2-1-0 .sui-icon-shopping-cart:before{content:"\CD"}.sui-2-1-0 .sui-icon-sitemap:before{content:"\B8"}.sui-2-1-0 .sui-icon-skull:before{content:"\E96C"}.sui-2-1-0 .sui-icon-smart-crawl:before{content:"\2202"}.sui-2-1-0 .sui-icon-smush:before{content:"\2021"}.sui-2-1-0 .sui-icon-snapshot:before{content:"\FB01"}.sui-2-1-0 .sui-icon-social-android:before{content:"."}.sui-2-1-0 .sui-icon-social-apple:before{content:"a"}.sui-2-1-0 .sui-icon-social-drive:before{content:"v"}.sui-2-1-0 .sui-icon-social-dropbox:before{content:"d"}.sui-2-1-0 .sui-icon-social-facebook:before{content:"f"}.sui-2-1-0 .sui-icon-social-github:before{content:"h"}.sui-2-1-0 .sui-icon-social-google-plus:before{content:"g"}.sui-2-1-0 .sui-icon-social-linkedin:before{content:"i"}.sui-2-1-0 .sui-icon-social-twitter:before{content:"t"}.sui-2-1-0 .sui-icon-social-youtube:before{content:"y"}.sui-2-1-0 .sui-icon-speed-optimize:before{content:"\F8"}.sui-2-1-0 .sui-icon-star:before{content:"S"}.sui-2-1-0 .sui-icon-star-line:before{content:"\CF"}.sui-2-1-0 .sui-icon-stopwatch:before{content:"\E986"}.sui-2-1-0 .sui-icon-storage-server-data:before{content:"\CE"}.sui-2-1-0 .sui-icon-style-type:before{content:"<"}.sui-2-1-0 .sui-icon-tablet-landscape:before{content:"["}.sui-2-1-0 .sui-icon-tablet-portrait:before{content:"]"}.sui-2-1-0 .sui-icon-target:before{content:"\2020"}.sui-2-1-0 .sui-icon-tech-support:before{content:"\E915"}.sui-2-1-0 .sui-icon-testing-bottle-beaker:before{content:"\E9B4"}.sui-2-1-0 .sui-icon-text-color:before{content:"\A8"}.sui-2-1-0 .sui-icon-themes:before{content:"T"}.sui-2-1-0 .sui-icon-thumbnails:before{content:"G"}.sui-2-1-0 .sui-icon-ticket:before{content:"\E97D"}.sui-2-1-0 .sui-icon-timed-countdown:before{content:"\E911"}.sui-2-1-0 .sui-icon-trash:before{content:"Q"}.sui-2-1-0 .sui-icon-underline:before{content:"U"}.sui-2-1-0 .sui-icon-unlink:before{content:"6"}.sui-2-1-0 .sui-icon-unlock:before{content:"0"}.sui-2-1-0 .sui-icon-update:before{content:"\AE"}.sui-2-1-0 .sui-icon-update-arrow:before{content:"\E902"}.sui-2-1-0 .sui-icon-upfront:before{content:"\201A"}.sui-2-1-0 .sui-icon-upload-cloud:before{content:"\A2"}.sui-2-1-0 .sui-icon-uptime:before{content:"\B1"}.sui-2-1-0 .sui-icon-user-hero-points-trophy:before{content:"1"}.sui-2-1-0 .sui-icon-user-reputation-points:before{content:"2"}.sui-2-1-0 .sui-icon-user-star-level-up:before{content:"3"}.sui-2-1-0 .sui-icon-wand-magic:before{content:"Z"}.sui-2-1-0 .sui-icon-warning-alert:before{content:"!"}.sui-2-1-0 .sui-icon-web-globe-world:before{content:"W"}.sui-2-1-0 .sui-icon-white-label-video:before{content:"u"}.sui-2-1-0 .sui-icon-widget-settings-config:before{content:"x"}.sui-2-1-0 .sui-icon-wordpress:before{content:"w"}.sui-2-1-0 .sui-icon-wpmudev-logo:before{content:"\2039"}.sui-2-1-0 .sui-icon-wpmudev-logo-2:before{content:"\203A"}.sui-2-1-0 .sui-icon-wrench-tool:before{content:"\2044"}.sui-2-1-0 .sui-icon-zip:before{content:"\3A9"}.sui-2-1-0 .sui-icon-zoom-in:before{content:"\2260"}.sui-2-1-0 .sui-icon-zoom-out:before{content:"\2013"}.sui-2-1-0 .sui-button,.sui-2-1-0 a.sui-button,.sui-2-1-0 button.sui-button{min-width:80px;height:30px;cursor:pointer;display:inline-block;position:relative;padding:7px 16px;margin:0 10px 0 0;border:0;background-color:#888;color:#fff;font:500 12px/16px Roboto,Arial,sans-serif;letter-spacing:-.025em;text-transform:uppercase;text-align:center;text-decoration:none;border-radius:3px;transition:all .3s ease;text-shadow:none;white-space:nowrap}.sui-2-1-0 .sui-button .sui-loading,.sui-2-1-0 a.sui-button .sui-loading,.sui-2-1-0 button.sui-button .sui-loading{display:none;position:absolute;top:50%;left:50%;margin:-8px}.sui-2-1-0 .sui-button .sui-loading-text,.sui-2-1-0 a.sui-button .sui-loading-text,.sui-2-1-0 button.sui-button .sui-loading-text{pointer-events:none}.sui-2-1-0 .sui-button i:before,.sui-2-1-0 a.sui-button i:before,.sui-2-1-0 button.sui-button i:before{transition:all .3s ease;color:#fff}.sui-2-1-0 .sui-button:focus,.sui-2-1-0 .sui-button:hover,.sui-2-1-0 a.sui-button:focus,.sui-2-1-0 a.sui-button:hover,.sui-2-1-0 button.sui-button:focus,.sui-2-1-0 button.sui-button:hover{outline:none;background:#7b7b7b;border-color:#7b7b7b}.sui-2-1-0 .sui-button:active,.sui-2-1-0 .sui-button:focus,.sui-2-1-0 a.sui-button:active,.sui-2-1-0 a.sui-button:focus,.sui-2-1-0 button.sui-button:active,.sui-2-1-0 button.sui-button:focus{outline:none;box-shadow:none;background:#7b7b7b;border-color:#7b7b7b}.sui-2-1-0 .sui-button.sui-button-blue,.sui-2-1-0 .sui-button.sui-button-primary,.sui-2-1-0 a.sui-button.sui-button-blue,.sui-2-1-0 a.sui-button.sui-button-primary,.sui-2-1-0 button.sui-button.sui-button-blue,.sui-2-1-0 button.sui-button.sui-button-primary{background:#17a8e3}.sui-2-1-0 .sui-button.sui-button-blue i:before,.sui-2-1-0 .sui-button.sui-button-primary i:before,.sui-2-1-0 a.sui-button.sui-button-blue i:before,.sui-2-1-0 a.sui-button.sui-button-primary i:before,.sui-2-1-0 button.sui-button.sui-button-blue i:before,.sui-2-1-0 button.sui-button.sui-button-primary i:before{color:#fff}.sui-2-1-0 .sui-button.sui-button-blue:focus,.sui-2-1-0 .sui-button.sui-button-blue:hover,.sui-2-1-0 .sui-button.sui-button-primary:focus,.sui-2-1-0 .sui-button.sui-button-primary:hover,.sui-2-1-0 a.sui-button.sui-button-blue:focus,.sui-2-1-0 a.sui-button.sui-button-blue:hover,.sui-2-1-0 a.sui-button.sui-button-primary:focus,.sui-2-1-0 a.sui-button.sui-button-primary:hover,.sui-2-1-0 button.sui-button.sui-button-blue:focus,.sui-2-1-0 button.sui-button.sui-button-blue:hover,.sui-2-1-0 button.sui-button.sui-button-primary:focus,.sui-2-1-0 button.sui-button.sui-button-primary:hover{background:#0a9bd6}.sui-2-1-0 .sui-button.sui-button-red,.sui-2-1-0 a.sui-button.sui-button-red,.sui-2-1-0 button.sui-button.sui-button-red{background:#cb4b57}.sui-2-1-0 .sui-button.sui-button-red i:before,.sui-2-1-0 a.sui-button.sui-button-red i:before,.sui-2-1-0 button.sui-button.sui-button-red i:before{color:#fff}.sui-2-1-0 .sui-button.sui-button-red:focus,.sui-2-1-0 .sui-button.sui-button-red:hover,.sui-2-1-0 a.sui-button.sui-button-red:focus,.sui-2-1-0 a.sui-button.sui-button-red:hover,.sui-2-1-0 button.sui-button.sui-button-red:focus,.sui-2-1-0 button.sui-button.sui-button-red:hover{opacity:1;background:#c40000}.sui-2-1-0 .sui-button.sui-button-green,.sui-2-1-0 a.sui-button.sui-button-green,.sui-2-1-0 button.sui-button.sui-button-green{background:#1abc9c}.sui-2-1-0 .sui-button.sui-button-green i:before,.sui-2-1-0 a.sui-button.sui-button-green i:before,.sui-2-1-0 button.sui-button.sui-button-green i:before{color:#fff}.sui-2-1-0 .sui-button.sui-button-green:focus,.sui-2-1-0 .sui-button.sui-button-green:hover,.sui-2-1-0 a.sui-button.sui-button-green:focus,.sui-2-1-0 a.sui-button.sui-button-green:hover,.sui-2-1-0 button.sui-button.sui-button-green:focus,.sui-2-1-0 button.sui-button.sui-button-green:hover{opacity:1;background:#148f77}.sui-2-1-0 .sui-button.sui-button-upsell,.sui-2-1-0 a.sui-button.sui-button-upsell,.sui-2-1-0 button.sui-button.sui-button-upsell{border:2px solid #d1f1ea;color:#1abc9c;width:auto;height:26px;line-height:15px;background:transparent;padding:4px 16px;border-radius:15px;text-transform:none}.sui-2-1-0 .sui-button.sui-button-upsell:focus,.sui-2-1-0 .sui-button.sui-button-upsell:hover,.sui-2-1-0 a.sui-button.sui-button-upsell:focus,.sui-2-1-0 a.sui-button.sui-button-upsell:hover,.sui-2-1-0 button.sui-button.sui-button-upsell:focus,.sui-2-1-0 button.sui-button.sui-button-upsell:hover{opacity:1;border-color:#148f77;background:#148f77;color:#fff}.sui-2-1-0 .sui-button.sui-button-ghost,.sui-2-1-0 a.sui-button.sui-button-ghost,.sui-2-1-0 button.sui-button.sui-button-ghost{padding:5px 16px 7px;border:2px solid #ddd;background:transparent;color:#888}.sui-2-1-0 .sui-button.sui-button-ghost i:before,.sui-2-1-0 a.sui-button.sui-button-ghost i:before,.sui-2-1-0 button.sui-button.sui-button-ghost i:before{color:#888}.sui-2-1-0 .sui-button.sui-button-ghost:focus,.sui-2-1-0 .sui-button.sui-button-ghost:hover,.sui-2-1-0 a.sui-button.sui-button-ghost:focus,.sui-2-1-0 a.sui-button.sui-button-ghost:hover,.sui-2-1-0 button.sui-button.sui-button-ghost:focus,.sui-2-1-0 button.sui-button.sui-button-ghost:hover{border-color:#888;background:#888;color:#fff}.sui-2-1-0 .sui-button.sui-button-ghost:focus i:before,.sui-2-1-0 .sui-button.sui-button-ghost:hover i:before,.sui-2-1-0 a.sui-button.sui-button-ghost:focus i:before,.sui-2-1-0 a.sui-button.sui-button-ghost:hover i:before,.sui-2-1-0 button.sui-button.sui-button-ghost:focus i:before,.sui-2-1-0 button.sui-button.sui-button-ghost:hover i:before{color:#fff}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-blue,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-blue,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-blue{border-color:#17a8e3;color:#17a8e3}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-blue i:before,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-blue i:before,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-blue i:before{color:#17a8e3}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-blue:focus,.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-blue:hover,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-blue:focus,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-blue:hover,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-blue:focus,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-blue:hover{border-color:#17a8e3;background:#17a8e3;color:#fff}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-red,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-red,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-red{border-color:#c40000;color:#c40000}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-red i:before,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-red i:before,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-red i:before{color:red}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-red:focus,.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-red:hover,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-red:focus,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-red:hover,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-red:focus,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-red:hover{opacity:1;border-color:#c40000;background:#c40000;color:#fff}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-green,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-green,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-green{border-color:#1abc9c;color:#1abc9c}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-green i:before,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-green i:before,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-green i:before{color:#1abc9c}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-green:focus,.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-green:hover,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-green:focus,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-green:hover,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-green:focus,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-green:hover{opacity:1;border-color:#148f77;background:#148f77;color:#fff}.sui-2-1-0 .sui-button.sui-button-lg,.sui-2-1-0 a.sui-button.sui-button-lg,.sui-2-1-0 button.sui-button.sui-button-lg{height:40px;padding:11px 20px 9px;border-radius:3px;font:500 15px/20px Roboto,Arial,sans-serif}.sui-2-1-0 .sui-button.sui-button-lg.sui-button-ghost,.sui-2-1-0 a.sui-button.sui-button-lg.sui-button-ghost,.sui-2-1-0 button.sui-button.sui-button-lg.sui-button-ghost{padding:9px 20px}.sui-2-1-0 .sui-button.sui-button-onload,.sui-2-1-0 a.sui-button.sui-button-onload,.sui-2-1-0 button.sui-button.sui-button-onload{pointer-events:none}.sui-2-1-0 .sui-button.sui-button-onload .sui-loading,.sui-2-1-0 a.sui-button.sui-button-onload .sui-loading,.sui-2-1-0 button.sui-button.sui-button-onload .sui-loading{display:block}.sui-2-1-0 .sui-button.sui-button-onload,.sui-2-1-0 .sui-button.sui-button-onload.sui-button-blue,.sui-2-1-0 .sui-button.sui-button-onload.sui-button-green,.sui-2-1-0 .sui-button.sui-button-onload.sui-button-red,.sui-2-1-0 a.sui-button.sui-button-onload,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-blue,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-green,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-red,.sui-2-1-0 button.sui-button.sui-button-onload,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-blue,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-green,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-red{background:#e6e6e6}.sui-2-1-0 .sui-button.sui-button-onload.sui-button-blue .sui-loading-text,.sui-2-1-0 .sui-button.sui-button-onload.sui-button-green .sui-loading-text,.sui-2-1-0 .sui-button.sui-button-onload.sui-button-red .sui-loading-text,.sui-2-1-0 .sui-button.sui-button-onload .sui-loading-text,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-blue .sui-loading-text,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-green .sui-loading-text,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-red .sui-loading-text,.sui-2-1-0 a.sui-button.sui-button-onload .sui-loading-text,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-blue .sui-loading-text,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-green .sui-loading-text,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-red .sui-loading-text,.sui-2-1-0 button.sui-button.sui-button-onload .sui-loading-text{color:#e6e6e6}.sui-2-1-0 .sui-button.sui-button-onload.sui-button-ghost,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-ghost,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-ghost{border-color:#e6e6e6;background:transparent}.sui-2-1-0 .sui-button.sui-button-onload.sui-button-ghost .sui-loading-text,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-ghost .sui-loading-text,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-ghost .sui-loading-text{color:transparent}.sui-2-1-0 .sui-button.disabled,.sui-2-1-0 .sui-button:disabled,.sui-2-1-0 .sui-button[disabled],.sui-2-1-0 a.sui-button.disabled,.sui-2-1-0 a.sui-button:disabled,.sui-2-1-0 a.sui-button[disabled],.sui-2-1-0 button.sui-button.disabled,.sui-2-1-0 button.sui-button:disabled,.sui-2-1-0 button.sui-button[disabled]{color:#aaa;border-color:#ddd;background:#f8f8f8;box-shadow:none;pointer-events:none;cursor:default;transform:none}.sui-2-1-0 .sui-button.disabled:focus,.sui-2-1-0 .sui-button.disabled:hover,.sui-2-1-0 .sui-button:disabled:focus,.sui-2-1-0 .sui-button:disabled:hover,.sui-2-1-0 .sui-button[disabled]:focus,.sui-2-1-0 .sui-button[disabled]:hover,.sui-2-1-0 a.sui-button.disabled:focus,.sui-2-1-0 a.sui-button.disabled:hover,.sui-2-1-0 a.sui-button:disabled:focus,.sui-2-1-0 a.sui-button:disabled:hover,.sui-2-1-0 a.sui-button[disabled]:focus,.sui-2-1-0 a.sui-button[disabled]:hover,.sui-2-1-0 button.sui-button.disabled:focus,.sui-2-1-0 button.sui-button.disabled:hover,.sui-2-1-0 button.sui-button:disabled:focus,.sui-2-1-0 button.sui-button:disabled:hover,.sui-2-1-0 button.sui-button[disabled]:focus,.sui-2-1-0 button.sui-button[disabled]:hover{color:#aaa;border-color:#ddd;background:#f8f8f8;box-shadow:none;cursor:default;transform:none}.sui-2-1-0 .sui-button:last-child,.sui-2-1-0 a.sui-button:last-child,.sui-2-1-0 button.sui-button:last-child{margin:0}.sui-2-1-0 .sui-button.sui-button-icon,.sui-2-1-0 a.sui-button.sui-button-icon,.sui-2-1-0 button.sui-button.sui-button-icon{min-width:0}.sui-2-1-0 .sui-toggle{position:relative;display:inline-block;width:34px;height:16px;margin-right:10px}.sui-2-1-0 .sui-toggle.sui-toggle-label{top:3px}.sui-2-1-0 .sui-toggle-label{vertical-align:text-bottom;line-height:22px;margin-left:10px}.sui-2-1-0 .sui-toggle input[type=checkbox][disabled]+.sui-toggle-slider{opacity:.5;cursor:not-allowed}.sui-2-1-0 .sui-toggle-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#f8f8f8;border-radius:100px;transition:.4s;border:1px solid #e6e6e6}.sui-2-1-0 .sui-toggle-slider:before{position:absolute;content:"";height:16px;width:16px;left:-1px;bottom:-1px;background-color:#888;border-radius:50%;transition:.2s}.sui-2-1-0 input[type=checkbox]:checked+.sui-toggle-slider:before{background-color:#17a8e3;transform:translateX(18px)}.sui-2-1-0 .sui-wrap *,.sui-2-1-0 .sui-wrap :after,.sui-2-1-0 .sui-wrap :before{box-sizing:border-box}.sui-2-1-0 .sui-box{position:relative;min-height:20px;background-color:#fff;border-radius:5px;margin-bottom:30px;box-shadow:0 2px 0 #eaeaea}@media (max-width:782px){.sui-2-1-0 .sui-box{margin-bottom:20px}}.sui-2-1-0 .sui-box-header{border-bottom:1px solid #eaeaea;padding:15px 30px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (max-width:782px){.sui-2-1-0 .sui-box-header{padding:15px 20px}}.sui-2-1-0 .sui-box-header>h3>i{line-height:30px}.sui-2-1-0 .sui-box-body{padding:30px}@media (max-width:782px){.sui-2-1-0 .sui-box-body{padding:20px}}.sui-2-1-0 .sui-box-body .sui-box-settings-row{position:relative;border-bottom:1px solid #e6e6e6;padding-bottom:30px;display:table;width:100%;margin-top:30px}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-box-settings-row{display:block;margin-top:20px;padding-bottom:20px}}.sui-2-1-0 .sui-box-body .sui-box-settings-row:first-of-type{margin-top:0}.sui-2-1-0 .sui-box-body .sui-box-settings-row:last-of-type{padding-bottom:0;border:0}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-box-settings-col-1{display:table-cell;width:230px;padding-right:30px}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-box-settings-col-1{display:block;padding-top:20px;width:100%;padding-right:0}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-box-settings-col-1:first-child{padding-top:0}}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-box-settings-col-2{display:table-cell}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-box-settings-col-2{display:block;padding-top:20px}}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-box-settings-col-2 .sui-settings-label{color:#666}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-form-field:last-of-type{margin-bottom:0}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-settings-label{display:block;font-weight:500;line-height:22px;color:#333}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-description{line-height:22px}.sui-2-1-0 .sui-box-body .sui-box-settings-row.sui-disabled{background-color:hsla(0,0%,95%,.5);opacity:.5;pointer-events:none}.sui-2-1-0 .sui-box-body.sui-upsell-items{padding:0}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row{border-bottom:none;margin-top:0}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row:before{position:absolute;display:block;clear:both;height:1px;content:"";background-color:#e6e6e6;left:30px;right:30px;top:0}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row:first-of-type{margin-top:0}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row:first-of-type:before{display:none}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row:last-of-type{padding-bottom:30px}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row:last-of-type:before{display:none}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row{padding-right:30px;padding-left:30px;padding-top:31px}@media (max-width:782px){.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row{padding-right:20px;padding-left:20px;padding-top:21px}}@media (max-width:782px){.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row:first-of-type{padding-top:20px}}.sui-2-1-0 .sui-box-body .sui-upsell-row{position:relative}.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-image{position:absolute;bottom:0;width:100px}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-image{display:none}}.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-notice{padding-left:130px}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-notice{padding-left:0}}.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-notice p{position:relative;border-radius:4px;background-color:#e1f6ff;padding:20px 30px;color:#333;font-size:13px;line-height:22px}.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-notice p:after{position:absolute;top:43%;left:0;margin-left:-7px;content:"";width:0;height:0;border-top:7px solid transparent;border-bottom:7px solid transparent;border-right:7px solid #e1f6ff}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-notice p:after{display:none}}.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-notice p a{color:#333;text-decoration:underline;font-weight:500}.sui-2-1-0 .sui-box-body .sui-settings-box{padding:30px;border:1px solid #e6e6e6;border-radius:5px}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-settings-box{padding:20px}}.sui-2-1-0 .sui-box-footer{border-top:1px solid #eaeaea;padding:30px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.sui-2-1-0 .sui-box-footer.sui-pull-up{margin-top:-15px}@media (max-width:782px){.sui-2-1-0 .sui-box-footer{padding:20px}}.sui-2-1-0 .sui-box-title{display:block;font-weight:700;font-size:15px;line-height:30px;font-family:Roboto,Arial,sans-serif;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sui-2-1-0 .sui-box-title *{vertical-align:middle}.sui-2-1-0 .sui-box-title i{margin-right:10px;display:block;float:left}.sui-2-1-0 .sui-box-title i:before{color:inherit;font-size:20px;vertical-align:text-bottom}.sui-2-1-0 h3.sui-box-title{text-transform:none}.sui-2-1-0 .sui-with-bottom-border{padding-bottom:30px;border-bottom:1px solid #e6e6e6;margin-bottom:30px}@media (max-width:782px){.sui-2-1-0 .sui-with-bottom-border{margin-bottom:20px;padding-bottom:20px}}.sui-2-1-0 .sui-border-frame{border:1px solid #e6e6e6;border-radius:5px;margin:10px 0 0;padding:30px}@media (max-width:782px){.sui-2-1-0 .sui-border-frame{padding:20px}}.sui-2-1-0 .sui-col,.sui-2-1-0 [class*=sui-col-]{min-height:1px;padding-left:15px;padding-right:15px;position:relative}@media (max-width:782px){.sui-2-1-0 .sui-col,.sui-2-1-0 [class*=sui-col-]{padding-left:10px;padding-right:10px}}.sui-2-1-0 .sui-row{display:-ms-flexbox;display:flex;-ms-flex-flow:wrap;flex-flow:wrap;margin-right:-15px;margin-left:-15px}@media (max-width:782px){.sui-2-1-0 .sui-row{margin-left:-10px;margin-right:-10px}}.sui-2-1-0 .sui-reverse{-ms-flex-direction:row-reverse;flex-direction:row-reverse}.sui-2-1-0 .sui-col{-ms-flex:1;flex:1}.sui-2-1-0 [class*=sui-col-]{-ms-flex:0 0 auto;flex:0 0 auto;width:100%;max-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.sui-2-1-0 .sui-col-xs-12{width:100%;max-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.sui-2-1-0 .sui-col-xs-offset-12{margin-left:100%}.sui-2-1-0 .sui-col-xs-11{width:91.66667%;max-width:91.66667%;-ms-flex-preferred-size:91.66667%;flex-basis:91.66667%}.sui-2-1-0 .sui-col-xs-offset-11{margin-left:91.66667%}.sui-2-1-0 .sui-col-xs-10{width:83.33333%;max-width:83.33333%;-ms-flex-preferred-size:83.33333%;flex-basis:83.33333%}.sui-2-1-0 .sui-col-xs-offset-10{margin-left:83.33333%}.sui-2-1-0 .sui-col-xs-9{width:75%;max-width:75%;-ms-flex-preferred-size:75%;flex-basis:75%}.sui-2-1-0 .sui-col-xs-offset-9{margin-left:75%}.sui-2-1-0 .sui-col-xs-8{width:66.66667%;max-width:66.66667%;-ms-flex-preferred-size:66.66667%;flex-basis:66.66667%}.sui-2-1-0 .sui-col-xs-offset-8{margin-left:66.66667%}.sui-2-1-0 .sui-col-xs-7{width:58.33333%;max-width:58.33333%;-ms-flex-preferred-size:58.33333%;flex-basis:58.33333%}.sui-2-1-0 .sui-col-xs-offset-7{margin-left:58.33333%}.sui-2-1-0 .sui-col-xs-6{width:50%;max-width:50%;-ms-flex-preferred-size:50%;flex-basis:50%}.sui-2-1-0 .sui-col-xs-offset-6{margin-left:50%}.sui-2-1-0 .sui-col-xs-5{width:41.66667%;max-width:41.66667%;-ms-flex-preferred-size:41.66667%;flex-basis:41.66667%}.sui-2-1-0 .sui-col-xs-offset-5{margin-left:41.66667%}.sui-2-1-0 .sui-col-xs-4{width:33.33333%;max-width:33.33333%;-ms-flex-preferred-size:33.33333%;flex-basis:33.33333%}.sui-2-1-0 .sui-col-xs-offset-4{margin-left:33.33333%}.sui-2-1-0 .sui-col-xs-3{width:25%;max-width:25%;-ms-flex-preferred-size:25%;flex-basis:25%}.sui-2-1-0 .sui-col-xs-offset-3{margin-left:25%}.sui-2-1-0 .sui-col-xs-2{width:16.66667%;max-width:16.66667%;-ms-flex-preferred-size:16.66667%;flex-basis:16.66667%}.sui-2-1-0 .sui-col-xs-offset-2{margin-left:16.66667%}.sui-2-1-0 .sui-col-xs-1{width:8.33333%;max-width:8.33333%;-ms-flex-preferred-size:8.33333%;flex-basis:8.33333%}.sui-2-1-0 .sui-col-xs-offset-1{margin-left:8.33333%}@media (min-width:0px){.sui-2-1-0 .sui-col-xs-12{width:100%;max-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.sui-2-1-0 .sui-col-xs-offset-12{margin-left:100%}.sui-2-1-0 .sui-col-xs-11{width:91.66667%;max-width:91.66667%;-ms-flex-preferred-size:91.66667%;flex-basis:91.66667%}.sui-2-1-0 .sui-col-xs-offset-11{margin-left:91.66667%}.sui-2-1-0 .sui-col-xs-10{width:83.33333%;max-width:83.33333%;-ms-flex-preferred-size:83.33333%;flex-basis:83.33333%}.sui-2-1-0 .sui-col-xs-offset-10{margin-left:83.33333%}.sui-2-1-0 .sui-col-xs-9{width:75%;max-width:75%;-ms-flex-preferred-size:75%;flex-basis:75%}.sui-2-1-0 .sui-col-xs-offset-9{margin-left:75%}.sui-2-1-0 .sui-col-xs-8{width:66.66667%;max-width:66.66667%;-ms-flex-preferred-size:66.66667%;flex-basis:66.66667%}.sui-2-1-0 .sui-col-xs-offset-8{margin-left:66.66667%}.sui-2-1-0 .sui-col-xs-7{width:58.33333%;max-width:58.33333%;-ms-flex-preferred-size:58.33333%;flex-basis:58.33333%}.sui-2-1-0 .sui-col-xs-offset-7{margin-left:58.33333%}.sui-2-1-0 .sui-col-xs-6{width:50%;max-width:50%;-ms-flex-preferred-size:50%;flex-basis:50%}.sui-2-1-0 .sui-col-xs-offset-6{margin-left:50%}.sui-2-1-0 .sui-col-xs-5{width:41.66667%;max-width:41.66667%;-ms-flex-preferred-size:41.66667%;flex-basis:41.66667%}.sui-2-1-0 .sui-col-xs-offset-5{margin-left:41.66667%}.sui-2-1-0 .sui-col-xs-4{width:33.33333%;max-width:33.33333%;-ms-flex-preferred-size:33.33333%;flex-basis:33.33333%}.sui-2-1-0 .sui-col-xs-offset-4{margin-left:33.33333%}.sui-2-1-0 .sui-col-xs-3{width:25%;max-width:25%;-ms-flex-preferred-size:25%;flex-basis:25%}.sui-2-1-0 .sui-col-xs-offset-3{margin-left:25%}.sui-2-1-0 .sui-col-xs-2{width:16.66667%;max-width:16.66667%;-ms-flex-preferred-size:16.66667%;flex-basis:16.66667%}.sui-2-1-0 .sui-col-xs-offset-2{margin-left:16.66667%}.sui-2-1-0 .sui-col-xs-1{width:8.33333%;max-width:8.33333%;-ms-flex-preferred-size:8.33333%;flex-basis:8.33333%}.sui-2-1-0 .sui-col-xs-offset-1{margin-left:8.33333%}}@media (min-width:480px){.sui-2-1-0 .sui-col-sm-12{width:100%;max-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.sui-2-1-0 .sui-col-sm-offset-12{margin-left:100%}.sui-2-1-0 .sui-col-sm-11{width:91.66667%;max-width:91.66667%;-ms-flex-preferred-size:91.66667%;flex-basis:91.66667%}.sui-2-1-0 .sui-col-sm-offset-11{margin-left:91.66667%}.sui-2-1-0 .sui-col-sm-10{width:83.33333%;max-width:83.33333%;-ms-flex-preferred-size:83.33333%;flex-basis:83.33333%}.sui-2-1-0 .sui-col-sm-offset-10{margin-left:83.33333%}.sui-2-1-0 .sui-col-sm-9{width:75%;max-width:75%;-ms-flex-preferred-size:75%;flex-basis:75%}.sui-2-1-0 .sui-col-sm-offset-9{margin-left:75%}.sui-2-1-0 .sui-col-sm-8{width:66.66667%;max-width:66.66667%;-ms-flex-preferred-size:66.66667%;flex-basis:66.66667%}.sui-2-1-0 .sui-col-sm-offset-8{margin-left:66.66667%}.sui-2-1-0 .sui-col-sm-7{width:58.33333%;max-width:58.33333%;-ms-flex-preferred-size:58.33333%;flex-basis:58.33333%}.sui-2-1-0 .sui-col-sm-offset-7{margin-left:58.33333%}.sui-2-1-0 .sui-col-sm-6{width:50%;max-width:50%;-ms-flex-preferred-size:50%;flex-basis:50%}.sui-2-1-0 .sui-col-sm-offset-6{margin-left:50%}.sui-2-1-0 .sui-col-sm-5{width:41.66667%;max-width:41.66667%;-ms-flex-preferred-size:41.66667%;flex-basis:41.66667%}.sui-2-1-0 .sui-col-sm-offset-5{margin-left:41.66667%}.sui-2-1-0 .sui-col-sm-4{width:33.33333%;max-width:33.33333%;-ms-flex-preferred-size:33.33333%;flex-basis:33.33333%}.sui-2-1-0 .sui-col-sm-offset-4{margin-left:33.33333%}.sui-2-1-0 .sui-col-sm-3{width:25%;max-width:25%;-ms-flex-preferred-size:25%;flex-basis:25%}.sui-2-1-0 .sui-col-sm-offset-3{margin-left:25%}.sui-2-1-0 .sui-col-sm-2{width:16.66667%;max-width:16.66667%;-ms-flex-preferred-size:16.66667%;flex-basis:16.66667%}.sui-2-1-0 .sui-col-sm-offset-2{margin-left:16.66667%}.sui-2-1-0 .sui-col-sm-1{width:8.33333%;max-width:8.33333%;-ms-flex-preferred-size:8.33333%;flex-basis:8.33333%}.sui-2-1-0 .sui-col-sm-offset-1{margin-left:8.33333%}}@media (min-width:783px){.sui-2-1-0 .sui-col-md-12{width:100%;max-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.sui-2-1-0 .sui-col-md-offset-12{margin-left:100%}.sui-2-1-0 .sui-col-md-11{width:91.66667%;max-width:91.66667%;-ms-flex-preferred-size:91.66667%;flex-basis:91.66667%}.sui-2-1-0 .sui-col-md-offset-11{margin-left:91.66667%}.sui-2-1-0 .sui-col-md-10{width:83.33333%;max-width:83.33333%;-ms-flex-preferred-size:83.33333%;flex-basis:83.33333%}.sui-2-1-0 .sui-col-md-offset-10{margin-left:83.33333%}.sui-2-1-0 .sui-col-md-9{width:75%;max-width:75%;-ms-flex-preferred-size:75%;flex-basis:75%}.sui-2-1-0 .sui-col-md-offset-9{margin-left:75%}.sui-2-1-0 .sui-col-md-8{width:66.66667%;max-width:66.66667%;-ms-flex-preferred-size:66.66667%;flex-basis:66.66667%}.sui-2-1-0 .sui-col-md-offset-8{margin-left:66.66667%}.sui-2-1-0 .sui-col-md-7{width:58.33333%;max-width:58.33333%;-ms-flex-preferred-size:58.33333%;flex-basis:58.33333%}.sui-2-1-0 .sui-col-md-offset-7{margin-left:58.33333%}.sui-2-1-0 .sui-col-md-6{width:50%;max-width:50%;-ms-flex-preferred-size:50%;flex-basis:50%}.sui-2-1-0 .sui-col-md-offset-6{margin-left:50%}.sui-2-1-0 .sui-col-md-5{width:41.66667%;max-width:41.66667%;-ms-flex-preferred-size:41.66667%;flex-basis:41.66667%}.sui-2-1-0 .sui-col-md-offset-5{margin-left:41.66667%}.sui-2-1-0 .sui-col-md-4{width:33.33333%;max-width:33.33333%;-ms-flex-preferred-size:33.33333%;flex-basis:33.33333%}.sui-2-1-0 .sui-col-md-offset-4{margin-left:33.33333%}.sui-2-1-0 .sui-col-md-3{width:25%;max-width:25%;-ms-flex-preferred-size:25%;flex-basis:25%}.sui-2-1-0 .sui-col-md-offset-3{margin-left:25%}.sui-2-1-0 .sui-col-md-2{width:16.66667%;max-width:16.66667%;-ms-flex-preferred-size:16.66667%;flex-basis:16.66667%}.sui-2-1-0 .sui-col-md-offset-2{margin-left:16.66667%}.sui-2-1-0 .sui-col-md-1{width:8.33333%;max-width:8.33333%;-ms-flex-preferred-size:8.33333%;flex-basis:8.33333%}.sui-2-1-0 .sui-col-md-offset-1{margin-left:8.33333%}}@media (min-width:1200px){.sui-2-1-0 .sui-col-lg-12{width:100%;max-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.sui-2-1-0 .sui-col-lg-offset-12{margin-left:100%}.sui-2-1-0 .sui-col-lg-11{width:91.66667%;max-width:91.66667%;-ms-flex-preferred-size:91.66667%;flex-basis:91.66667%}.sui-2-1-0 .sui-col-lg-offset-11{margin-left:91.66667%}.sui-2-1-0 .sui-col-lg-10{width:83.33333%;max-width:83.33333%;-ms-flex-preferred-size:83.33333%;flex-basis:83.33333%}.sui-2-1-0 .sui-col-lg-offset-10{margin-left:83.33333%}.sui-2-1-0 .sui-col-lg-9{width:75%;max-width:75%;-ms-flex-preferred-size:75%;flex-basis:75%}.sui-2-1-0 .sui-col-lg-offset-9{margin-left:75%}.sui-2-1-0 .sui-col-lg-8{width:66.66667%;max-width:66.66667%;-ms-flex-preferred-size:66.66667%;flex-basis:66.66667%}.sui-2-1-0 .sui-col-lg-offset-8{margin-left:66.66667%}.sui-2-1-0 .sui-col-lg-7{width:58.33333%;max-width:58.33333%;-ms-flex-preferred-size:58.33333%;flex-basis:58.33333%}.sui-2-1-0 .sui-col-lg-offset-7{margin-left:58.33333%}.sui-2-1-0 .sui-col-lg-6{width:50%;max-width:50%;-ms-flex-preferred-size:50%;flex-basis:50%}.sui-2-1-0 .sui-col-lg-offset-6{margin-left:50%}.sui-2-1-0 .sui-col-lg-5{width:41.66667%;max-width:41.66667%;-ms-flex-preferred-size:41.66667%;flex-basis:41.66667%}.sui-2-1-0 .sui-col-lg-offset-5{margin-left:41.66667%}.sui-2-1-0 .sui-col-lg-4{width:33.33333%;max-width:33.33333%;-ms-flex-preferred-size:33.33333%;flex-basis:33.33333%}.sui-2-1-0 .sui-col-lg-offset-4{margin-left:33.33333%}.sui-2-1-0 .sui-col-lg-3{width:25%;max-width:25%;-ms-flex-preferred-size:25%;flex-basis:25%}.sui-2-1-0 .sui-col-lg-offset-3{margin-left:25%}.sui-2-1-0 .sui-col-lg-2{width:16.66667%;max-width:16.66667%;-ms-flex-preferred-size:16.66667%;flex-basis:16.66667%}.sui-2-1-0 .sui-col-lg-offset-2{margin-left:16.66667%}.sui-2-1-0 .sui-col-lg-1{width:8.33333%;max-width:8.33333%;-ms-flex-preferred-size:8.33333%;flex-basis:8.33333%}.sui-2-1-0 .sui-col-lg-offset-1{margin-left:8.33333%}}.sui-2-1-0 .sui-notice,.sui-2-1-0 .sui-notice-top{color:#333;font-weight:400;padding:15px 30px;position:relative;width:100%;border-radius:5px;margin-bottom:30px;background-color:#f2f2f2}@media (max-width:782px){.sui-2-1-0 .sui-notice,.sui-2-1-0 .sui-notice-top{margin-bottom:20px;padding:15px}}.sui-2-1-0 .sui-notice-top:last-child,.sui-2-1-0 .sui-notice:last-child{margin-bottom:0}.sui-2-1-0 .sui-notice-top p,.sui-2-1-0 .sui-notice p{padding:0 0 0 30px;color:#333}.sui-2-1-0 .sui-notice-top p:before,.sui-2-1-0 .sui-notice p:before{content:"I"}.sui-2-1-0 .sui-notice-top p a,.sui-2-1-0 .sui-notice-top p a:focus,.sui-2-1-0 .sui-notice-top p a:hover,.sui-2-1-0 .sui-notice p a,.sui-2-1-0 .sui-notice p a:focus,.sui-2-1-0 .sui-notice p a:hover{color:#333}.sui-2-1-0 .sui-notice-top p:before,.sui-2-1-0 .sui-notice p:before{color:#888;vertical-align:middle;top:-2px;margin-left:-30px;position:relative;margin-right:10px;font-size:20px}.sui-2-1-0 .sui-notice-top p:last-of-type,.sui-2-1-0 .sui-notice p:last-of-type{margin:0}.sui-2-1-0 .sui-notice-top.sui-notice-success,.sui-2-1-0 .sui-notice.sui-notice-success{background-color:#d1f1ea}.sui-2-1-0 .sui-notice-top.sui-notice-success p:before,.sui-2-1-0 .sui-notice.sui-notice-success p:before{content:"_";color:#1abc9c}.sui-2-1-0 .sui-notice-top.sui-notice-warning,.sui-2-1-0 .sui-notice.sui-notice-warning{background-color:#fff5d5}.sui-2-1-0 .sui-notice-top.sui-notice-warning p:before,.sui-2-1-0 .sui-notice.sui-notice-warning p:before{content:"!";color:#fecf2f}.sui-2-1-0 .sui-notice-top.sui-notice-error,.sui-2-1-0 .sui-notice.sui-notice-error{background-color:#ffe5e9}.sui-2-1-0 .sui-notice-top.sui-notice-error p:before,.sui-2-1-0 .sui-notice.sui-notice-error p:before{content:"!";color:#ff7f83}.sui-2-1-0 .sui-notice-top.sui-notice-info,.sui-2-1-0 .sui-notice.sui-notice-info{background-color:#e1f6ff}.sui-2-1-0 .sui-notice-top.sui-notice-info p:before,.sui-2-1-0 .sui-notice.sui-notice-info p:before{color:#17a8e3}.sui-2-1-0 .sui-notice-top.sui-notice-sm p,.sui-2-1-0 .sui-notice.sui-notice-sm p{font-size:13px;line-height:22px}.sui-2-1-0 .sui-notice-top.sui-notice-sm p:before,.sui-2-1-0 .sui-notice.sui-notice-sm p:before{font-size:16px}.sui-2-1-0 .sui-notice-top.sui-notice-sm a,.sui-2-1-0 .sui-notice.sui-notice-sm a{font-size:13px}.sui-2-1-0 .sui-notice-top.sui-notice-sm .sui-notice-dismiss a,.sui-2-1-0 .sui-notice.sui-notice-sm .sui-notice-dismiss a{margin-left:-14px}.sui-2-1-0 .sui-notice-top .sui-notice-dismiss,.sui-2-1-0 .sui-notice .sui-notice-dismiss{padding:0 0 0 30px;display:block;margin-top:6px;margin-bottom:-5px}.sui-2-1-0 .sui-notice-top .sui-notice-dismiss a,.sui-2-1-0 .sui-notice .sui-notice-dismiss a{font-weight:500;font-size:12px;text-transform:uppercase;text-decoration:none;color:#888;line-height:16px;padding:5px 10px;margin-left:-10px}.sui-2-1-0 .sui-notice-top.sui-notice-icon-tick p:before,.sui-2-1-0 .sui-notice.sui-notice-icon-tick p:before{content:"_"}.sui-2-1-0 .sui-notice-top.sui-no-notice-icon p,.sui-2-1-0 .sui-notice.sui-no-notice-icon p{padding:0}.sui-2-1-0 .sui-notice-top.sui-no-notice-icon p:before,.sui-2-1-0 .sui-notice.sui-no-notice-icon p:before{content:"";margin:0;padding:0}.sui-2-1-0 .sui-notice-top.sui-notice-top,.sui-2-1-0 .sui-notice.sui-notice-top{position:absolute;top:0;width:600px;z-index:100;left:50%;transform:translateX(-50%);box-shadow:0 5px 25px 0 rgba(0,0,0,.15)}.sui-2-1-0 .sui-notice-top.sui-notice-top:last-of-type,.sui-2-1-0 .sui-notice.sui-notice-top:last-of-type{margin:0}@media (max-width:782px){.sui-2-1-0 .sui-notice-top.sui-notice-top,.sui-2-1-0 .sui-notice.sui-notice-top{width:90%}}@media (max-width:600px){.sui-2-1-0 .sui-notice-top.sui-notice-top,.sui-2-1-0 .sui-notice.sui-notice-top{top:46px}}.sui-2-1-0 .sui-notice-top .sui-notice-buttons,.sui-2-1-0 .sui-notice .sui-notice-buttons{margin:10px 30px 0}.sui-2-1-0 p+.sui-notice{margin-top:30px}@media (max-width:782px){.sui-2-1-0 p+.sui-notice{margin-top:20px}}.sui-2-1-0 .sui-header{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;position:relative;line-height:1;margin-bottom:30px}.sui-2-1-0 .sui-header h1{text-transform:uppercase}@media (max-width:782px){.sui-2-1-0 .sui-header h1{width:100%}}@media (max-width:782px){.sui-2-1-0 .sui-header{margin-bottom:20px}}@media (max-width:782px){.sui-2-1-0 .sui-header .sui-actions-right{margin-left:0;margin-right:auto;margin-top:10px}}@media (max-width:782px){.sui-2-1-0 .sui-header .sui-actions-left{margin-left:0;margin-right:0;margin-top:10px}}.sui-2-1-0 .sui-header-title{color:#333;margin:0;text-align:left;text-transform:uppercase;font-weight:700;max-width:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sui-2-1-0 .sui-summary{padding:15px 30px 0;background-image:url(../images/graphic-hb-minify-summary@2x.png);background-repeat:no-repeat;background-position:3% 100%;background-size:192px 172px}@media (max-width:782px){.sui-2-1-0 .sui-summary{padding:20px 20px 10px}}@media (max-width:1100px){.sui-2-1-0 .sui-summary{background-image:none!important}}.sui-2-1-0 .sui-summary .sui-summary-image-space{width:100%;min-height:172px;float:left;max-width:192px}@media (max-width:1100px){.sui-2-1-0 .sui-summary .sui-summary-image-space{display:none!important}}.sui-2-1-0 .sui-summary .sui-summary-segment{position:relative;color:#333;width:calc(100% / 2 - 98px);padding-left:5%;display:inline-block;vertical-align:middle}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details{position:absolute;top:-5px;transform:translateY(-50%);min-height:80px}@media (max-width:600px){.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details{position:inherit;top:0;transform:translateY(0)}}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details .sui-summary-sub{display:block;font-size:13px;margin-top:0;margin-bottom:20px;line-height:22px;color:#888}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details .sui-summary-sub:last-of-type{margin-bottom:0}@media (max-width:960px){.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details .sui-summary-sub{margin-bottom:5px}}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details .sui-summary-percent{font-size:13px;line-height:22px;margin-left:-5px}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details i{position:relative;top:-22px;left:5px;font-size:16px}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details i+.sui-summary-percent{margin-left:-20px}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details i.sui-error:before,.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details i.sui-info:before,.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details i.sui-success:before,.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details i.sui-warning:before{color:inherit}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details .sui-summary-large{font-size:50px;line-height:55px;margin-bottom:20px}@media (max-width:1100px){.sui-2-1-0 .sui-summary .sui-summary-segment{text-align:left;padding-left:0;width:49%}}@media (max-width:600px){.sui-2-1-0 .sui-summary .sui-summary-segment{display:block;text-align:center;width:100%}}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-list{margin:0 0 15px}@media (max-width:783px){.sui-2-1-0 .sui-summary .sui-summary-segment .sui-list{margin:0 0 10px}}@media (max-width:600px){.sui-2-1-0 .sui-summary .sui-summary-segment .sui-list{text-align:left}}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-list .sui-list-detail{font-size:13px;font-weight:500;line-height:22px;color:#888}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-list .sui-list-detail i{line-height:0;vertical-align:middle}.sui-2-1-0 .sui-list{list-style:none;margin:0 0 20px;padding:0}.sui-2-1-0 .sui-list.sui-list-inline{margin-top:20px;margin-bottom:0}.sui-2-1-0 .sui-list.sui-list-standalone{margin-bottom:20px}.sui-2-1-0 .sui-list>li{position:relative;display:table;width:100%;padding:6px 0;margin:0;border-collapse:collapse;border-spacing:0}.sui-2-1-0 .sui-list>li>div{display:table-row}.sui-2-1-0 .sui-list>li.sui-list-header{color:#333;font-size:13px;font-weight:700;line-height:30px;padding-bottom:0}.sui-2-1-0 .sui-list>li.sui-list-header span{display:table-cell;border-bottom:1px solid #eee}.sui-2-1-0 .sui-list>li.sui-list-header span:nth-child(2){text-align:right}.sui-2-1-0 .sui-list>li .sui-list-detail{color:#888;text-align:right;padding:10px 0;font-size:13px;font-weight:500;line-height:22px}.sui-2-1-0 .sui-list>li .sui-list-detail .sui-tag{font-family:Roboto,Arial,sans-serif}.sui-2-1-0 .sui-list>li .sui-list-detail,.sui-2-1-0 .sui-list>li .sui-list-label{display:table-cell;vertical-align:middle;cursor:default;border-bottom:1px solid #eee}.sui-2-1-0 .sui-list>li .sui-list-label{font-size:13px;font-weight:500;line-height:22px;padding:19px 10px 19px 0;color:#333}.sui-2-1-0 .sui-list>li .sui-list-label.sui-list-header{font-family:Roboto Condensed,Roboto,Arial,sans-serif;width:200px;color:#777771}.sui-2-1-0 .sui-list>li:last-of-type .sui-list-detail,.sui-2-1-0 .sui-list>li:last-of-type .sui-list-label{border-bottom:none}.sui-2-1-0 .sui-list.sui-list-top-border{border-top:1px solid #eee}.sui-2-1-0 .sui-list.sui-list-bottom-border{border-bottom:1px solid #eee}.sui-2-1-0 .sui-tooltip{position:relative}.sui-2-1-0 .sui-tooltip:after,.sui-2-1-0 .sui-tooltip:before{content:"";opacity:0;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:none;position:absolute;z-index:1;transition:margin .2s,opacity .2s}.sui-2-1-0 .sui-tooltip:before{border:5px solid transparent}.sui-2-1-0 .sui-tooltip:after{content:attr(data-tooltip);min-width:40px;padding:8px 12px;border-radius:4px;background:#000;box-sizing:border-box;color:#fff;font:400 12px/18px Roboto,Arial,sans-serif;text-transform:none;text-align:center;white-space:nowrap}.sui-2-1-0 .sui-tooltip:hover:after,.sui-2-1-0 .sui-tooltip:hover:before{opacity:1}.sui-2-1-0 .sui-tooltip.sui-tooltip-constrained:after{min-width:240px;white-space:normal}.sui-2-1-0 .sui-tooltip.sui-tooltip-top:before,.sui-2-1-0 .sui-tooltip:before{bottom:100%;left:50%;border-top-color:#000;transform:translateX(-50%)}.sui-2-1-0 .sui-tooltip.sui-tooltip-top:after,.sui-2-1-0 .sui-tooltip:after{bottom:100%;left:50%;margin:0 0 10px;transform:translateX(-50%)}.sui-2-1-0 .sui-tooltip.sui-tooltip-top-right:after{left:0;transform:translateX(0)}.sui-2-1-0 .sui-tooltip.sui-tooltip-top-left:after{left:auto;transform:translateX(0);right:0}.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom-left:before,.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom-right:before,.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom:before{top:100%;bottom:inherit;border-top-color:transparent;border-bottom-color:#000}.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom-left:after,.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom-right:after,.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom:after{top:100%;bottom:inherit;margin:10px 0 0;transform:translateX(0)}.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom:after{transform:translateX(-50%)}.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom-right:after{left:0}.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom-left:after{left:auto;right:0}.sui-2-1-0 .sui-tooltip.sui-tooltip-left:before{top:50%;right:100%;bottom:inherit;left:inherit;border-top-color:transparent;border-left-color:#000;transform:translateY(-50%)}.sui-2-1-0 .sui-tooltip.sui-tooltip-left:after{top:50%;right:100%;bottom:inherit;left:inherit;margin:0 10px 0 0;transform:translateY(-50%)}.sui-2-1-0 .sui-tooltip.sui-tooltip-right:before{top:50%;bottom:inherit;left:100%;border-top-color:transparent;border-right-color:#000;transform:translateY(-50%)}.sui-2-1-0 .sui-tooltip.sui-tooltip-right:after{top:50%;bottom:inherit;left:100%;margin:0 0 0 10px;transform:translateY(-50%)}.sui-2-1-0 .select-container{position:relative;z-index:1;display:block;cursor:pointer;border-radius:4px;transition-property:background,border-color;transition-duration:.3s;text-align:left;border:1px solid #ddd;background-color:#f8f8f8}.sui-2-1-0 .select-container .dropdown-handle{transition:border-color .3s;display:inline-block;position:absolute;width:45px;height:auto;top:0;right:0;z-index:1011;border-radius:0 4px 4px 0;border-bottom:0;border-left-color:transparent;padding:0;text-align:center;line-height:40px;transition-property:color,border-color;transition-duration:.3s;color:#888}.sui-2-1-0 .select-container .dropdown-handle i:before{vertical-align:middle;font-size:12px}.sui-2-1-0 .select-container.sui-mobile-nav{background-color:#fff;margin-bottom:30px}@media (max-width:782px){.sui-2-1-0 .select-container.sui-mobile-nav{margin-bottom:20px}}.sui-2-1-0 .select-container.sui-mobile-nav .dropdown-handle{background-color:#fff;font-size:13px}.sui-2-1-0 .select-container:hover{border-color:#ddd}.sui-2-1-0 .select-container:hover .list-value{color:#333}.sui-2-1-0 .select-container:hover .list-results{border-left-color:#ddd;border-right-color:#ddd;border-bottom-color:#ddd}.sui-2-1-0 .select-container:hover .dropdown-handle{border-top-color:#ddd;border-right-color:#ddd}.sui-2-1-0 .select-container.active{z-index:99999;background:#f8f8f8}.sui-2-1-0 .select-container.active .list-value{background:#f8f8f8;border-radius:3px 0 0 0;color:#333}.sui-2-1-0 .select-container.active .dropdown-handle{border-color:#ddd;border-bottom-right-radius:3px}.sui-2-1-0 .select-container.active .list-results{left:0;right:0;width:auto;display:block;transition-duration:0ms}.sui-2-1-0 .select-container.active.sui-mobile-nav .dropdown-handle{background-color:transparent;font-size:13px}.sui-2-1-0 .select-container.active:hover{border-color:#ddd}.sui-2-1-0 .select-container.active:hover .list-value{color:#333}.sui-2-1-0 .select-container.active:hover .list-results{border-color:#ddd}.sui-2-1-0 .select-container.active:hover .list-results li{opacity:1}.sui-2-1-0 .select-container.active:hover .dropdown-handle{border-color:#ddd;color:#ddd}.sui-2-1-0 .select-list-container{position:relative;display:block;vertical-align:middle;padding-right:45px;zoom:1}.sui-2-1-0 .select-list-container .list-value{position:relative;display:block;overflow:hidden;text-overflow:ellipsis;background-clip:padding-box;text-decoration:none;white-space:nowrap;line-height:24px;height:auto;width:100%;padding:8px 8px 8px 15px;border:0;color:#aaa;font:500 15px/25px Roboto,Arial,sans-serif;transition-property:color;transition-duration:.3s}.sui-2-1-0 .select-list-container .list-results{position:absolute;top:41px;left:-9999px;right:-9999px;z-index:1010;width:0;background:#fff;border:1px solid #eaeaea;margin-left:-1px;margin-right:-1px;margin-top:1px;display:none;border-radius:4px;font:500 15px/25px Roboto,Arial,sans-serif;transition-property:opacity,border-color;transition-duration:.3s;padding-left:0;max-height:200px;overflow-y:auto}.sui-2-1-0 .select-list-container .list-results li{padding:10px 15px;background:none;color:#777771;cursor:pointer;list-style:none;font-weight:400;line-height:15px;word-wrap:break-word;margin:0;opacity:.8;transition-property:opacity;transition-duration:.3s;border-radius:0!important}.sui-2-1-0 .select-list-container .list-results .optgroup{cursor:default}.sui-2-1-0 .select-list-container .list-results .optgroup li{padding-left:30px;cursor:pointer}.sui-2-1-0 .select-list-container .list-results .optgroup li.optgroup-label{padding-left:10px;color:#aaa;cursor:default;pointer-events:none}.sui-2-1-0 .select-list-container .list-results li:last-child{border-radius:0 0 3px 3px}.sui-2-1-0 .select-list-container .list-results li:hover{background:#f2f2f2;color:#333}.sui-2-1-0 .select-list-container .list-results .optgroup li.optgroup-label:hover{background:none}.sui-2-1-0 .select-list-container .list-results .current{background:#888;color:#fff}.sui-2-1-0 .list-table>tbody>.select-open td,.sui-2-1-0 .list-table>tfoot>.select-open th,.sui-2-1-0 .list-table>thead>.select-open th{z-index:9}.sui-2-1-0 .sui-tag{display:inline-block;background-color:#fecf2f;color:#333;border-radius:15px;min-width:39px;height:26px;font-size:12px;line-height:26px;text-align:center;font-weight:500;padding:0 16px;cursor:default}.sui-2-1-0 .sui-tag.sui-tag-success{background-color:#1abc9c;color:#fff}.sui-2-1-0 .sui-tag.sui-tag-error{background-color:#ff7f83;color:#fff}.sui-2-1-0 .sui-tag.sui-tag-inactive{background-color:#e6e6e6;color:#aaa}.sui-2-1-0 .sui-tag.sui-tag-disabled{background-color:#f8f8f8;color:#aaa}.sui-2-1-0 .sui-tag.sui-tag-upgrade{background-color:#1abc9c;color:#fff}.sui-2-1-0 .sui-tag.sui-tag-upsell{border:2px solid #d1f1ea;color:#1abc9c;width:auto;height:26px;line-height:15px;background:transparent;padding:4px 16px}.sui-2-1-0 .sui-inline-label,.sui-2-1-0 .sui-label{font-family:Roboto,Arial,sans-serif;font-size:12px;font-weight:500;line-height:16px;color:#888;display:-ms-inline-flexbox;display:inline-flex;width:100%}.sui-2-1-0 label[for]{cursor:pointer}.sui-2-1-0 .sui-label-link{margin-left:auto;margin-right:0;font-weight:400;color:#888}.sui-2-1-0 .sui-inline-label{display:inline-block;margin:0;padding:0}.sui-2-1-0 .sui-form-control,.sui-2-1-0 .sui-upload-group{font-family:Roboto,Arial,sans-serif;letter-spacing:-.025em;display:block;width:100%;height:40px;padding:7px 15px;font-size:15px;font-weight:500;line-height:30px;color:#333;background-color:#f8f8f8;background-image:none;border:1px solid #ddd;border-radius:3px;transition:color .3s ease-in-out,border-color .3s ease-in-out,background-color .3s ease-in-out}.sui-2-1-0 .sui-form-control::-ms-expand,.sui-2-1-0 .sui-upload-group::-ms-expand{border:0;background-color:transparent}.sui-2-1-0 .sui-form-control[disabled],.sui-2-1-0 [disabled].sui-upload-group,fieldset[disabled] .sui-2-1-0 .sui-form-control,fieldset[disabled] .sui-2-1-0 .sui-upload-group{cursor:not-allowed}.sui-2-1-0 .sui-form-control:focus,.sui-2-1-0 .sui-form-control:hover,.sui-2-1-0 .sui-upload-group:focus,.sui-2-1-0 .sui-upload-group:hover{background-color:#fff;border:1px solid #ddd}.sui-2-1-0 .sui-form-control:focus,.sui-2-1-0 .sui-upload-group:focus{color:#333;outline:0;background-color:#fff}.sui-2-1-0 .sui-form-control::-webkit-input-placeholder,.sui-2-1-0 .sui-upload-group::-webkit-input-placeholder{color:#ddd}.sui-2-1-0 .sui-form-control:-ms-input-placeholder,.sui-2-1-0 .sui-upload-group:-ms-input-placeholder{color:#ddd}.sui-2-1-0 .sui-form-control::placeholder,.sui-2-1-0 .sui-upload-group::placeholder{color:#ddd}.sui-2-1-0 textarea.sui-form-control,.sui-2-1-0 textarea.sui-upload-group{line-height:20px;height:auto;max-width:100%;resize:vertical}.sui-2-1-0 select.sui-form-control,.sui-2-1-0 select.sui-upload-group{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAs0lEQVQ4T6WS2w0CIRBF59KA2oklaAdbgpbgB48SIBThduKWYClrA2CGgEEXNWH5moR7Zu48QJ0PnRytA6WUe67svb//clDrUkWt9UxEMYRw/AYzJIS4sd45t0ugMeZERNcY49yCCwRgS0Rna+346rGGAVz4s06aW0gQx2/DUUoNAEYAG86cxezkAWCw1k5lBoupZltThomhEMLhs/fmOgrM2VvQwmq9in8rWncAPWfXXfEJ6RpWD7sJ1JwAAAAASUVORK5CYII=);background-repeat:no-repeat;background-position:center right 10px;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;line-height:1}.sui-2-1-0 .sui-input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:stretch;align-items:stretch;width:100%}.sui-2-1-0 .sui-form-field{margin-bottom:30px}@media (max-width:782px){.sui-2-1-0 .sui-form-field{margin-bottom:20px}}.sui-2-1-0 .sui-form-field-error .sui-form-control,.sui-2-1-0 .sui-form-field-error .sui-upload-group{border-bottom:2px solid #ff7f83}.sui-2-1-0 .sui-error-message{display:block;margin-top:8px;color:#ff7f83;font-size:12px;line-height:16px;font-weight:500}.sui-2-1-0 .sui-description{display:block;margin-top:5px;color:#888;font-size:13px;line-height:16px;font-weight:400}.sui-2-1-0 .sui-description.sui-toggle-description{margin-left:48px}.sui-2-1-0 .sui-description.sui-checkbox-description,.sui-2-1-0 .sui-description.sui-radio-description{margin:0 27px 5px}.sui-2-1-0 .sui-password-group{position:relative}.sui-2-1-0 .sui-password-group .sui-password-toggle{cursor:pointer;background:transparent;border:none;color:#888;font-size:15px;line-height:1em;padding:0;position:absolute;top:50%;right:7px;height:30px;width:30px;transform:translateY(-50%);outline:0;border-radius:4px}.sui-2-1-0 .sui-password-group .sui-password-toggle:hover{background-color:rgba(0,0,0,.03)}.sui-2-1-0 .sui-password-group .sui-password-toggle:hover i:before{color:#666}.sui-2-1-0 .sui-checkbox,.sui-2-1-0 .sui-radio{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:start}.sui-2-1-0 .sui-checkbox span,.sui-2-1-0 .sui-radio span{-ms-flex-negative:0;flex-shrink:0;position:relative;display:inline-block;width:16px;height:16px;background-color:#e6e6e6;cursor:pointer;transition:.2s;border-radius:3px;margin-top:3px}.sui-2-1-0 .sui-checkbox span:before,.sui-2-1-0 .sui-radio span:before{opacity:0;content:"(";color:#fff;font-size:10px;line-height:16px;position:absolute;width:100%;text-align:center;transition:.2s}.sui-2-1-0 .sui-checkbox input:checked+span,.sui-2-1-0 .sui-radio input:checked+span{background-color:#17a8e3}.sui-2-1-0 .sui-checkbox input:checked+span:before,.sui-2-1-0 .sui-radio input:checked+span:before{opacity:1}.sui-2-1-0 .sui-checkbox .sui-description,.sui-2-1-0 .sui-radio .sui-description{cursor:pointer;margin-top:0;margin-left:10px;font-size:15px;line-height:22px;color:#666;font-weight:500}.sui-2-1-0 .sui-checkbox .sui-description.sui-description-sm,.sui-2-1-0 .sui-radio .sui-description.sui-description-sm{font-size:13px}.sui-2-1-0 .sui-checkbox input[disabled]+span,.sui-2-1-0 .sui-radio input[disabled]+span,fieldset[disabled] .sui-2-1-0 .sui-checkbox+span,fieldset[disabled] .sui-2-1-0 .sui-radio+span{cursor:not-allowed;opacity:.5}.sui-2-1-0 .sui-checkbox input[disabled]+span+div.sui-description,.sui-2-1-0 .sui-radio input[disabled]+span+div.sui-description{color:#aaa;cursor:not-allowed}.sui-2-1-0 .sui-checkbox span{border-radius:3px}.sui-2-1-0 .sui-checkbox+.sui-checkbox{margin-top:10px}.sui-2-1-0 .sui-radio span{border-radius:50%}.sui-2-1-0 .sui-radio+.sui-radio{margin-top:10px}.sui-2-1-0 .sui-upload-group{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.sui-2-1-0 .sui-upload-button{background-color:transparent;border-radius:4px;display:inline-block;margin:0 5px 0 0;font-size:13px;font-weight:400;line-height:1.5;pointer-events:none;padding:1px 16px;border:1px solid #ddd;background:0 0;color:#888;transition:all .2s}.sui-2-1-0 .sui-upload-label{width:100%}.sui-2-1-0 .sui-upload-label:focus .sui-upload-button,.sui-2-1-0 .sui-upload-label:hover .sui-upload-button{background-color:#888;border-color:#888;color:#fff}.sui-2-1-0 .sui-upload-message{font-weight:400}.sui-2-1-0 .sui-tabs{float:none;position:relative;padding:0;margin:0;background-color:#fff;border-top-left-radius:5px;border-top-right-radius:5px}.sui-2-1-0 .sui-tabs:after,.sui-2-1-0 .sui-tabs:before{content:"";display:table;clear:both}.sui-2-1-0 .sui-tabs .sui-tab{float:left}.sui-2-1-0 .sui-tabs .sui-tab:first-child label{border-top-left-radius:5px}.sui-2-1-0 .sui-tabs .sui-tab label{display:block;margin:0;top:0;cursor:pointer;position:relative;border:0;font-size:15px;text-transform:capitalize;color:#888;padding:0 10px;line-height:1.5em;height:40px}.sui-2-1-0 .sui-tabs .sui-tab input[type=radio]{display:none}.sui-2-1-0 .sui-tabs .sui-tab input[type=radio]:checked+label{background-color:#fff;color:#777771;height:61px;z-index:3}.sui-2-1-0 .sui-tabs .sui-tab .sui-tab-content{z-index:2;display:none;text-align:left;left:0;right:0;width:auto;padding:30px 0 0;position:absolute;min-height:150px;border-top:1px solid #eaeaea;background-color:#fff;overflow:auto;border-top:2px solid #eaeaea;top:38px}@media (max-width:782px){.sui-2-1-0 .sui-tabs .sui-tab .sui-tab-content{padding:20px 0 0}}.sui-2-1-0 .sui-tabs .sui-tab input[type=radio]:checked~.sui-tab-content{display:block}.sui-2-1-0 .sui-tabs .sui-tab>.active{color:#333;border-bottom:2px solid #333;z-index:10}.sui-2-1-0 .sui-row-with-sidenav{clear:both;position:relative;display:table;width:100%;table-layout:fixed;margin-bottom:30px}@media (max-width:1100px){.sui-2-1-0 .sui-row-with-sidenav{display:block}}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav{width:220px;padding-right:30px;display:table-cell;position:relative;vertical-align:top}@media (max-width:1100px){.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav{display:block;width:100%;padding:0}}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav ul{padding:0}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav li{list-style:none;margin-bottom:6px}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab{padding:5px 15px;height:30px;line-height:1.5em}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab.current{background-color:#e6e6e6;border-radius:20px}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab.current a{color:#333;font-weight:500}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab .sui-tag,.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab i{position:relative;top:-25px;left:100%;margin-left:-27px}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab i{top:-23px;margin-left:-10px}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab i:before{font-size:21px}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs a{color:#666;display:block;font-weight:400;transition:.3s}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs a:focus,.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs a:hover{color:#333}@media (max-width:1100px){.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-sidenav-hide-md{display:none}}@media (min-width:1100px){.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-sidenav-hide-lg{display:none}}.sui-2-1-0 .sui-row-with-sidenav .sui-box{display:block;position:relative;vertical-align:top}@media (max-width:1100px){.sui-2-1-0 .sui-row-with-sidenav .sui-box{display:block}}.sui-2-1-0 .sui-dropdown{position:relative;display:inline-block;text-align:left}.sui-2-1-0 .sui-dropdown-anchor{display:inline-block;color:#888}.sui-2-1-0 .sui-dropdown-anchor:active,.sui-2-1-0 .sui-dropdown-anchor:focus,.sui-2-1-0 .sui-dropdown-anchor:hover,.sui-2-1-0 .sui-dropdown-anchor:hover:not(:focus):not(:active),.sui-2-1-0 .sui-dropdown.open .sui-dropdown-anchor{color:#17a8e3}.sui-2-1-0 .sui-dropdown.open ul{display:block;list-style:none}.sui-2-1-0 .sui-dropdown.open:after,.sui-2-1-0 .sui-dropdown.open:before{content:"";position:absolute;border-style:solid;border-width:0 9px 9px;display:block;width:0;border-top-color:#000;margin:7px 0 0}.sui-2-1-0 .sui-dropdown.open:after{border-color:#fff transparent;z-index:11;top:24px}.sui-2-1-0 .sui-dropdown.open:before{border-color:#e6e6e6 transparent;z-index:10;top:23px}.sui-2-1-0 .sui-dropdown ul{border:1px solid #ddd;box-shadow:0 3px 7px 0 rgba(0,0,0,.05);min-width:180px;margin-bottom:0;margin-top:0;padding:10px 0;font:500 15px/25px Roboto,Arial,sans-serif;background:#fff;position:absolute;left:auto;right:-22px;top:130%;z-index:10;border-radius:4px;display:none}.sui-2-1-0 .sui-dropdown ul li{padding:10px 15px;background:none;color:#777771;cursor:pointer;list-style:none;font-weight:400;line-height:15px;word-wrap:break-word;margin:0;opacity:.8;transition-property:opacity;transition-duration:.3s;border-radius:0!important}.sui-2-1-0 .sui-dropdown ul li a{font-weight:300;color:inherit}.sui-2-1-0 .sui-dropdown ul li a:hover{color:inherit}.sui-2-1-0 .sui-dropdown ul li:hover:not(.sui-dropdown-label){background:#f2f2f2;color:#333}.sui-2-1-0 .sui-dropdown ul li.active{background:#f8f8f8;color:#333}.sui-2-1-0 .sui-dropdown ul li.current{background:#888;color:#fff}.sui-2-1-0 .sui-dropdown ul li.sui-dropdown-label{border-bottom:1px solid #e6e6e6;line-height:30px;cursor:default;color:#666}.sui-2-1-0 .sui-dropdown.sui-dropdown-right ul{left:-22px;transform:none}.sui-2-1-0 .sui-dropdown.sui-dropdown-center ul{left:50%;transform:translateX(-50%)}.sui-2-1-0 .sui-dropdown.wds-item-loading{font-size:18px}.sui-2-1-0 .sui-dropdown.wds-item-loading .sui-dropdown-anchor{visibility:hidden}@keyframes sui1{to{stroke-dasharray:2.63894 262.89378}}@keyframes sui2{to{stroke-dasharray:5.27788 525.78757}}@keyframes sui3{to{stroke-dasharray:7.91681 788.68135}}@keyframes sui4{to{stroke-dasharray:10.55575 1051.57513}}@keyframes sui5{to{stroke-dasharray:13.19469 1314.46891}}@keyframes sui6{to{stroke-dasharray:15.83363 1577.3627}}@keyframes sui7{to{stroke-dasharray:18.47256 1840.25648}}@keyframes sui8{to{stroke-dasharray:21.1115 2103.15026}}@keyframes sui9{to{stroke-dasharray:23.75044 2366.04405}}@keyframes sui10{to{stroke-dasharray:26.38938 2628.93783}}@keyframes sui11{to{stroke-dasharray:29.02832 2891.83161}}@keyframes sui12{to{stroke-dasharray:31.66725 3154.72539}}@keyframes sui13{to{stroke-dasharray:34.30619 3417.61918}}@keyframes sui14{to{stroke-dasharray:36.94513 3680.51296}}@keyframes sui15{to{stroke-dasharray:39.58407 3943.40674}}@keyframes sui16{to{stroke-dasharray:42.22301 4206.30053}}@keyframes sui17{to{stroke-dasharray:44.86194 4469.19431}}@keyframes sui18{to{stroke-dasharray:47.50088 4732.08809}}@keyframes sui19{to{stroke-dasharray:50.13982 4994.98188}}@keyframes sui20{to{stroke-dasharray:52.77876 5257.87566}}@keyframes sui21{to{stroke-dasharray:55.41769 5520.76944}}@keyframes sui22{to{stroke-dasharray:58.05663 5783.66322}}@keyframes sui23{to{stroke-dasharray:60.69557 6046.55701}}@keyframes sui24{to{stroke-dasharray:63.33451 6309.45079}}@keyframes sui25{to{stroke-dasharray:65.97345 6572.34457}}@keyframes sui26{to{stroke-dasharray:68.61238 6835.23836}}@keyframes sui27{to{stroke-dasharray:71.25132 7098.13214}}@keyframes sui28{to{stroke-dasharray:73.89026 7361.02592}}@keyframes sui29{to{stroke-dasharray:76.5292 7623.9197}}@keyframes sui30{to{stroke-dasharray:79.16813 7886.81349}}@keyframes sui31{to{stroke-dasharray:81.80707 8149.70727}}@keyframes sui32{to{stroke-dasharray:84.44601 8412.60105}}@keyframes sui33{to{stroke-dasharray:87.08495 8675.49484}}@keyframes sui34{to{stroke-dasharray:89.72389 8938.38862}}@keyframes sui35{to{stroke-dasharray:92.36282 9201.2824}}@keyframes sui36{to{stroke-dasharray:95.00176 9464.17618}}@keyframes sui37{to{stroke-dasharray:97.6407 9727.06997}}@keyframes sui38{to{stroke-dasharray:100.27964 9989.96375}}@keyframes sui39{to{stroke-dasharray:102.91858 10252.85753}}@keyframes sui40{to{stroke-dasharray:105.55751 10515.75132}}@keyframes sui41{to{stroke-dasharray:108.19645 10778.6451}}@keyframes sui42{to{stroke-dasharray:110.83539 11041.53888}}@keyframes sui43{to{stroke-dasharray:113.47433 11304.43266}}@keyframes sui44{to{stroke-dasharray:116.11326 11567.32645}}@keyframes sui45{to{stroke-dasharray:118.7522 11830.22023}}@keyframes sui46{to{stroke-dasharray:121.39114 12093.11401}}@keyframes sui47{to{stroke-dasharray:124.03008 12356.0078}}@keyframes sui48{to{stroke-dasharray:126.66902 12618.90158}}@keyframes sui49{to{stroke-dasharray:129.30795 12881.79536}}@keyframes sui50{to{stroke-dasharray:131.94689 13144.68915}}@keyframes sui51{to{stroke-dasharray:134.58583 13407.58293}}@keyframes sui52{to{stroke-dasharray:137.22477 13670.47671}}@keyframes sui53{to{stroke-dasharray:139.8637 13933.37049}}@keyframes sui54{to{stroke-dasharray:142.50264 14196.26428}}@keyframes sui55{to{stroke-dasharray:145.14158 14459.15806}}@keyframes sui56{to{stroke-dasharray:147.78052 14722.05184}}@keyframes sui57{to{stroke-dasharray:150.41946 14984.94563}}@keyframes sui58{to{stroke-dasharray:153.05839 15247.83941}}@keyframes sui59{to{stroke-dasharray:155.69733 15510.73319}}@keyframes sui60{to{stroke-dasharray:158.33627 15773.62697}}@keyframes sui61{to{stroke-dasharray:160.97521 16036.52076}}@keyframes sui62{to{stroke-dasharray:163.61415 16299.41454}}@keyframes sui63{to{stroke-dasharray:166.25308 16562.30832}}@keyframes sui64{to{stroke-dasharray:168.89202 16825.20211}}@keyframes sui65{to{stroke-dasharray:171.53096 17088.09589}}@keyframes sui66{to{stroke-dasharray:174.1699 17350.98967}}@keyframes sui67{to{stroke-dasharray:176.80883 17613.88345}}@keyframes sui68{to{stroke-dasharray:179.44777 17876.77724}}@keyframes sui69{to{stroke-dasharray:182.08671 18139.67102}}@keyframes sui70{to{stroke-dasharray:184.72565 18402.5648}}@keyframes sui71{to{stroke-dasharray:187.36459 18665.45859}}@keyframes sui72{to{stroke-dasharray:190.00352 18928.35237}}@keyframes sui73{to{stroke-dasharray:192.64246 19191.24615}}@keyframes sui74{to{stroke-dasharray:195.2814 19454.13993}}@keyframes sui75{to{stroke-dasharray:197.92034 19717.03372}}@keyframes sui76{to{stroke-dasharray:200.55928 19979.9275}}@keyframes sui77{to{stroke-dasharray:203.19821 20242.82128}}@keyframes sui78{to{stroke-dasharray:205.83715 20505.71507}}@keyframes sui79{to{stroke-dasharray:208.47609 20768.60885}}@keyframes sui80{to{stroke-dasharray:211.11503 21031.50263}}@keyframes sui81{to{stroke-dasharray:213.75396 21294.39642}}@keyframes sui82{to{stroke-dasharray:216.3929 21557.2902}}@keyframes sui83{to{stroke-dasharray:219.03184 21820.18398}}@keyframes sui84{to{stroke-dasharray:221.67078 22083.07776}}@keyframes sui85{to{stroke-dasharray:224.30972 22345.97155}}@keyframes sui86{to{stroke-dasharray:226.94865 22608.86533}}@keyframes sui87{to{stroke-dasharray:229.58759 22871.75911}}@keyframes sui88{to{stroke-dasharray:232.22653 23134.6529}}@keyframes sui89{to{stroke-dasharray:234.86547 23397.54668}}@keyframes sui90{to{stroke-dasharray:237.5044 23660.44046}}@keyframes sui91{to{stroke-dasharray:240.14334 23923.33424}}@keyframes sui92{to{stroke-dasharray:242.78228 24186.22803}}@keyframes sui93{to{stroke-dasharray:245.42122 24449.12181}}@keyframes sui94{to{stroke-dasharray:248.06016 24712.01559}}@keyframes sui95{to{stroke-dasharray:250.69909 24974.90938}}@keyframes sui96{to{stroke-dasharray:253.33803 25237.80316}}@keyframes sui97{to{stroke-dasharray:255.97697 25500.69694}}@keyframes sui98{to{stroke-dasharray:258.61591 25763.59072}}@keyframes sui99{to{stroke-dasharray:261.25485 26026.48451}}@keyframes sui100{to{stroke-dasharray:263.89378 26289.37829}}.sui-2-1-0 .sui-circle-score{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:30px;width:auto;opacity:0;transition:all .4s}.sui-2-1-0 .sui-circle-score svg{height:100%;transform:rotate(-90deg);transform-origin:center}.sui-2-1-0 .sui-circle-score svg circle{fill:none;stroke-linecap:butt}.sui-2-1-0 .sui-circle-score svg circle:first-child{stroke:#f2f2f2}.sui-2-1-0 .sui-circle-score svg circle:last-child{stroke:#1abc9c}.sui-2-1-0 .sui-circle-score.loaded{opacity:1}.sui-2-1-0 .sui-circle-score-label{margin-left:10px;font-weight:500}.sui-2-1-0 .sui-circle-score-sm{height:30px}.sui-2-1-0 .sui-circle-score-lg{height:120px}.sui-2-1-0 .sui-circle-score-lg .sui-circle-score-label{display:none}.sui-2-1-0 .sui-grade-aplus svg circle:last-child,.sui-2-1-0 .sui-grade-a svg circle:last-child,.sui-2-1-0 .sui-grade-b svg circle:last-child{stroke:#1abc9c}.sui-2-1-0 .sui-grade-c svg circle:last-child,.sui-2-1-0 .sui-grade-d svg circle:last-child{stroke:#fecf2f}.sui-2-1-0 .sui-grade-e svg circle:last-child,.sui-2-1-0 .sui-grade-f svg circle:last-child{stroke:#ff7f83}.sui-2-1-0 #wpfooter{display:none}.sui-2-1-0 .sui-footer{text-align:center;margin-top:50px;color:#aaa;font-size:13px}.sui-2-1-0 .sui-footer i:before{font-size:11px;line-height:22px;margin:0 3px}.sui-2-1-0 #sui-cross-sell-footer>div{width:100%;text-align:center;border-bottom:1px solid #e6e6e6;line-height:.1em;margin:10px 0 40px}.sui-2-1-0 #sui-cross-sell-footer>div>span{position:relative;color:#888;background-color:#f1f1f1;padding:0 30px;font-size:16px;top:8px}.sui-2-1-0 #sui-cross-sell-footer h3{font-size:22px;font-weight:700;line-height:30px;text-transform:none}.sui-2-1-0 .sui-cross-sell-modules{margin-top:30px}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-1,.sui-2-1-0 .sui-cross-sell-modules .sui-cross-2,.sui-2-1-0 .sui-cross-sell-modules .sui-cross-3{min-height:150px;border-radius:5px 5px 0 0}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-1>span,.sui-2-1-0 .sui-cross-sell-modules .sui-cross-2>span,.sui-2-1-0 .sui-cross-sell-modules .sui-cross-3>span{width:56px;height:56px;display:block;border:3px solid #fff;border-radius:50%;position:relative;top:80px;left:15px;box-shadow:0 1px 10px 0 rgba(0,0,0,.25)}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-1{background:url(../images/plugins-smush.jpg) 50%;background-size:cover}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-1>span{background:url(../images/plugins-smush-icon.png) no-repeat 50%;background-size:50px 50px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:2dppx),only screen and (min-resolution:192dpi){.sui-2-1-0 .sui-cross-sell-modules .sui-cross-1>span{background-image:url(../images/plugins-smush-icon@2x.png)}}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-2{background:url(../images/plugins-defender.jpg) 50%;background-size:cover}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-2>span{background:url(../images/plugins-defender-icon.png) no-repeat 50%;background-size:50px 50px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:2dppx),only screen and (min-resolution:192dpi){.sui-2-1-0 .sui-cross-sell-modules .sui-cross-2>span{background-image:url(../images/plugins-defender-icon@2x.png)}}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-3{background:url(../images/plugins-crawl.jpg) 50%;background-size:cover}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-3>span{background:url(../images/plugins-crawl-icon.png) no-repeat 50%;background-size:50px 50px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:2dppx),only screen and (min-resolution:192dpi){.sui-2-1-0 .sui-cross-sell-modules .sui-cross-3>span{background-image:url(../images/plugins-crawl-icon@2x.png)}}.sui-2-1-0 .sui-cross-sell-modules .sui-box-body{text-align:center;border-radius:0 0 5px 5px}.sui-2-1-0 .sui-cross-sell-modules .sui-box-body p{color:#888;font-size:13px;line-height:20px;margin-bottom:30px}.sui-2-1-0 .sui-cross-sell-modules h3{font-size:18px;font-weight:700;line-height:30px;text-transform:none;margin-top:0;min-height:60px}.sui-2-1-0 .sui-cross-sell-bottom{text-align:center;margin-top:50px}.sui-2-1-0 .sui-cross-sell-bottom h3{font-size:22px;font-weight:700;line-height:30px;text-transform:none}.sui-2-1-0 .sui-cross-sell-bottom p{max-width:500px;margin:20px auto 30px}.sui-2-1-0 .sui-cross-sell-bottom .sui-button{margin:0}.sui-2-1-0 .sui-cross-sell-bottom img{display:block;height:auto;max-width:100%;margin:30px auto 0}.sui-2-1-0 .sui-progress-block{background-color:#f8f8f8;border-radius:5px;width:100%;height:60px;padding:15px 30px}.sui-2-1-0 .sui-progress-block .sui-progress{overflow:hidden;width:100%}.sui-2-1-0 .sui-progress-block .sui-progress .sui-progress-text{width:65px;float:left;text-align:left}.sui-2-1-0 .sui-progress-block .sui-progress .sui-progress-text:before{margin-right:10px;position:relative;top:3px;font-size:18px}.sui-2-1-0 .sui-progress-block .sui-progress .sui-progress-text img{display:inline-block;vertical-align:middle;margin-right:10px}.sui-2-1-0 .sui-progress-block .sui-progress .sui-progress-text span{font-weight:700;font-family:Roboto Condensed,Roboto,Arial,sans-serif;font-size:13px;color:#333;vertical-align:middle;line-height:30px}.sui-2-1-0 .sui-progress-block .sui-progress .sui-progress-bar{background:#e6e6e6;border-radius:5px;height:10px;overflow:hidden;margin-top:10px;position:relative}.sui-2-1-0 .sui-progress-block .sui-progress .sui-progress-bar span{background:#17a8e3;height:10px;display:inline-block;position:absolute;top:0;left:0;transition:width 1s ease-in-out}.sui-2-1-0 .sui-progress-block .sui-progress-close{display:none}.sui-2-1-0 .sui-progress-block.sui-progress-can-close{position:relative}.sui-2-1-0 .sui-progress-block.sui-progress-can-close .sui-progress{padding-right:40px}.sui-2-1-0 .sui-progress-block.sui-progress-can-close .sui-progress-close{display:block;position:absolute;right:20px;width:30px;height:30px;cursor:pointer;background:transparent;border:none;color:#888;font-size:15px;line-height:1em;padding:0;top:50%;transform:translateY(-50%);outline:0;border-radius:4px}.sui-2-1-0 .sui-progress-block.sui-progress-can-close .sui-progress-close i:before{color:#aaa;font-size:16px;position:relative}.sui-2-1-0 .sui-progress-block.sui-progress-can-close .sui-progress-close:hover{background-color:rgba(0,0,0,.03)}.sui-2-1-0 .sui-progress-block.sui-progress-can-close .sui-progress-close:hover i:before{color:#666}.sui-2-1-0 .sui-progress-state{margin-top:10px;text-align:center}.sui-2-1-0 .sui-progress-state .sui-progress-state-text{color:#888;font-size:13px;line-height:22px}.sui-2-1-0 .sui-table{width:100%;border:1px solid #e6e6e6;border-collapse:collapse;border-spacing:unset;border-radius:5px;color:#666;font-size:13px}.sui-2-1-0 .sui-table th{white-space:nowrap;text-align:left;padding:20px 30px;font-weight:500;line-height:1;color:#333}.sui-2-1-0 .sui-table td,.sui-2-1-0 .sui-table th{border-bottom:1px solid #e6e6e6}.sui-2-1-0 .sui-table tr:last-child td{border-bottom:none}.sui-2-1-0 .sui-table td{padding:20px 30px}.sui-2-1-0 .sui-table tfoot th{border-bottom:none;border-top:1px solid #e6e6e6}.sui-2-1-0 .sui-field-list{border:1px solid #e6e6e6;border-radius:5px}.sui-2-1-0 .sui-field-list-header{padding:20px 30px}.sui-2-1-0 .sui-field-list-item{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;border-top:1px solid #e6e6e6;padding:15px 30px}.sui-2-1-0 .sui-field-list-item-label{margin-left:0;margin-right:auto}.sui-2-1-0 .sui-field-list-title{font-family:Roboto,Arial,sans-serif;font-size:13px;line-height:30px;color:#333;text-transform:capitalize;font-weight:500;margin:0}@media (max-width:782px){.sui-2-1-0 .sui-table{border:none}.sui-2-1-0 .sui-table td,.sui-2-1-0 .sui-table th{padding:15px 15px 15px 0}.sui-2-1-0 .sui-table td:last-of-type,.sui-2-1-0 .sui-table th:last-of-type{padding-right:0}.sui-2-1-0 .sui-table tr:last-child td{border-bottom:1px solid #e6e6e6}}.sui-2-1-0 .sui-accordion{border:0}.sui-2-1-0 .sui-accordion:after{content:"";display:table;margin-bottom:30px}.sui-2-1-0 .sui-accordion-item{display:table-row;vertical-align:middle;cursor:pointer;transition:background-color .2s}.sui-2-1-0 .sui-accordion-item,.sui-2-1-0 .sui-accordion-item+.sui-accordion-item-content{border-left:2px solid transparent}.sui-2-1-0 .sui-accordion-item.sui-success{color:inherit;border-color:#1abc9c}.sui-2-1-0 .sui-accordion-item.sui-success i:before{color:inherit}.sui-2-1-0 .sui-accordion-item.sui-success+.sui-accordion-item-content{border-color:#1abc9c}.sui-2-1-0 .sui-accordion-item.sui-warning{color:inherit;border-color:#fecf2f}.sui-2-1-0 .sui-accordion-item.sui-warning i:before{color:inherit}.sui-2-1-0 .sui-accordion-item.sui-warning+.sui-accordion-item-content{border-color:#fecf2f}.sui-2-1-0 .sui-accordion-item.sui-error{color:inherit;border-color:#ff7f83}.sui-2-1-0 .sui-accordion-item.sui-error i:before{color:inherit}.sui-2-1-0 .sui-accordion-item.sui-error+.sui-accordion-item-content{border-color:#ff7f83}.sui-2-1-0 .sui-accordion-item:focus,.sui-2-1-0 .sui-accordion-item:hover{background-color:#f8f8f8}.sui-2-1-0 .sui-accordion-item td{padding:15px 30px}@media (max-width:782px){.sui-2-1-0 .sui-accordion-item td{padding:15px 20px}}.sui-2-1-0 .sui-accordion-item td>*{vertical-align:middle}.sui-2-1-0 .sui-accordion-item--open td{background-color:#f8f8f8;border-bottom:1px solid #f8f8f8}.sui-2-1-0 .sui-accordion-item--open+.sui-accordion-item-content{display:table-row}.sui-2-1-0 .sui-accordion-item--open .sui-accordion-open-indicator i{transform:rotate(180deg)}.sui-2-1-0 .sui-accordion-open-indicator{float:right;text-align:center}.sui-2-1-0 .sui-accordion-open-indicator i{transform-origin:center;font-size:10px;color:#888;transition:.5s}.sui-2-1-0 .sui-accordion-open-indicator i:before{position:relative;top:2px}.sui-2-1-0 .sui-accordion-item-title{font-size:15px}.sui-2-1-0 .sui-accordion-item-title i{font-size:20px;margin-right:10px}.sui-2-1-0 .sui-accordion-item-content{display:none;background-color:#f8f8f8;border-top:0}.sui-2-1-0 .sui-accordion-item-content td{width:100%;padding:0 30px 30px}@media (max-width:782px){.sui-2-1-0 .sui-accordion-item-content td{padding:0 20px 20px}}.sui-2-1-0 .sui-accordion-item-content .sui-box{margin-bottom:0}.sui-2-1-0 .sui-code-snippet-wrapper{position:relative}.sui-2-1-0 .sui-code-snippet-wrapper [data-clipboard-target]{position:absolute;right:15px;top:15px;margin:0;min-width:auto}.sui-2-1-0 .sui-dialog[aria-hidden=true]{display:none}.sui-2-1-0 .sui-dialog{position:fixed;z-index:1;top:0;right:0;bottom:0;left:160px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-dialog-content{max-width:400px}@media (max-width:400px){.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-dialog-content{max-width:90%}}.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-box-header{border:none;text-align:center;display:block;position:relative}.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-box-header .sui-box-title{margin-top:30px;margin-bottom:-10px;font-size:22px}.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-box-header .sui-dialog-close{position:absolute;right:30px;top:30px}.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-box-body p{font-size:13px;line-height:22px;text-align:center}.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-box-footer{border:none;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.sui-2-1-0 .sui-dialog.sui-dialog-lg .sui-dialog-content{max-width:980px}@media (max-width:1200px){.sui-2-1-0 .sui-dialog.sui-dialog-lg .sui-dialog-content{max-width:90%}}@media (max-width:960px){.sui-2-1-0 .sui-dialog{left:36px}}@media (max-width:782px){.sui-2-1-0 .sui-dialog{left:0}}.sui-2-1-0 .sui-dialog *{box-sizing:border-box}.sui-2-1-0 .sui-dialog-overlay{position:fixed;z-index:2;background-color:rgba(51,51,51,.95);top:0;right:0;bottom:0;left:160px}@media (max-width:960px){.sui-2-1-0 .sui-dialog-overlay{left:36px}}@media (max-width:782px){.sui-2-1-0 .sui-dialog-overlay{left:0}}.sui-2-1-0 .sui-dialog-content{z-index:2;position:relative;width:100%;max-width:600px;margin:0 auto;max-height:85%;overflow-y:auto}.sui-2-1-0 .sui-dialog-content>.sui-box{box-shadow:0 10px 40px rgba(0,0,0,.2)}.sui-2-1-0 .sui-dialog-content .sui-box-body>*{margin-bottom:30px}@media (max-width:782px){.sui-2-1-0 .sui-dialog-content .sui-box-body>*{margin-bottom:20px}}.sui-2-1-0 .sui-dialog-content .sui-box-body>:last-child{margin-bottom:0}.sui-2-1-0 .sui-dialog-close{font-size:1.25em;background-image:none;background-color:transparent;border:0;cursor:pointer;color:#aaa;outline-style:none}.sui-2-1-0 .sui-dialog-close:before{content:")"}.sui-2-1-0 .sui-listing li{color:#777771;line-height:26px;padding:2px 0 2px 34px;position:relative}.sui-2-1-0 .sui-listing li:before{content:"_";color:#17a8e3;top:1px;font-size:20px;vertical-align:middle;position:absolute;left:0;width:20px;height:20px;opacity:.8;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1}
assets/shared-ui-2/fonts/WPMU-DEV-Icon.eot ADDED
Binary file
assets/shared-ui-2/fonts/WPMU-DEV-Icon.svg ADDED
@@ -0,0 +1,233 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata>Generated by IcoMoon</metadata>
5
+ <defs>
6
+ <font id="WPMU-DEV-Icon" horiz-adv-x="1024">
7
+ <font-face units-per-em="1024" ascent="960" descent="-64" />
8
+ <missing-glyph horiz-adv-x="1024" />
9
+ <glyph unicode="&#x20;" horiz-adv-x="512" d="" />
10
+ <glyph unicode="&#x21;" glyph-name="fi-warning-alert" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512c-282.77 0-512-229.23-512-512s229.23-512 512-512zM459.776 732.843c0 9.426 7.641 17.067 17.067 17.067h68.267c9.426 0 17.067-7.641 17.067-17.067v-330.752c0-9.426-7.641-17.067-17.067-17.067h-67.243c-9.426 0-17.067 7.641-17.067 17.067zM512 310.613c34.109-0.386 61.611-28.126 61.611-62.29 0-0.061 0-0.123 0-0.184 0-34.3-27.813-62.113-62.123-62.113s-62.123 27.813-62.123 62.123c0 0 0 0 0 0 0 34.498 27.966 62.464 62.464 62.464 0.060 0 0.12 0 0.18 0z" />
11
+ <glyph unicode="&#x23;" glyph-name="fi-align-justify" d="M972.8 960h-921.6c-28.277 0-51.2-22.923-51.2-51.2v-46.421c0-28.277 22.923-51.2 51.2-51.2h921.6c28.277 0 51.2 22.923 51.2 51.2v46.421c0 28.277-22.923 51.2-51.2 51.2zM972.8 667.136h-921.6c-28.277 0-51.2-22.923-51.2-51.2v-46.421c0-28.277 22.923-51.2 51.2-51.2h921.6c28.277 0 51.2 22.923 51.2 51.2v47.275c0 28.277-22.923 51.2-51.2 51.2zM972.8 375.125h-921.6c-28.277 0-51.2-22.923-51.2-51.2v-46.421c0-28.277 22.923-51.2 51.2-51.2h921.6c28.277 0 51.2 22.923 51.2 51.2v47.275c0 28.277-22.923 51.2-51.2 51.2zM972.8 83.115h-921.6c-28.277 0-51.2-22.923-51.2-51.2v-44.715c0-28.277 22.923-51.2 51.2-51.2h921.6c28.277 0 51.2 22.923 51.2 51.2v45.568c0 28.277-22.923 51.2-51.2 51.2z" />
12
+ <glyph unicode="&#x24;" glyph-name="fi-dollar" horiz-adv-x="657" d="M397.483 531.797v162.816c57.244-13.411 106.989-39.912 147.792-76.241l-0.336 0.294c3.046-2.866 7.159-4.627 11.684-4.627 5.721 0 10.784 2.815 13.881 7.135l0.035 0.051 68.267 96.768c2.941 3.182 4.744 7.454 4.744 12.146 0 5.442-2.426 10.318-6.256 13.605-64.084 57.685-146.852 95.709-238.205 104.009l-1.606 93.643c0 10.274-8.329 18.603-18.603 18.603h-73.728c-10.274 0-18.603-8.329-18.603-18.603v-91.136c-159.232-16.555-253.611-117.931-253.611-237.056 0-160.427 132.096-206.507 253.611-235.861v-182.955c-73.541 13.989-137.119 49.613-185.583 99.904l-1.126 0.107c-3.077 3.023-7.3 4.89-11.958 4.89-6.999 0-13.014-4.213-15.647-10.241l-0.043-0.11-67.584-96.939c-3.165-3.101-5.127-7.419-5.127-12.195 0-5.934 3.029-11.161 7.625-14.219l0.063-0.039c64.853-64.853 155.648-112.128 279.552-122.709v-87.552c-0.008-0.204-0.013-0.443-0.013-0.683 0-10.218 8.239-18.512 18.436-18.602h73.736c10.274 0 18.603 8.329 18.603 18.603v0 87.552c173.397 17.067 259.584 119.467 259.584 250.027 0 161.621-136.533 208.896-259.584 238.933zM286.549 558.251c-47.616 16.043-81.749 33.621-81.749 67.925 0 40.107 29.525 68.267 81.408 75.435zM397.483 192v158.037c51.2-17.067 88.405-35.499 88.405-74.24s-28.16-72.021-88.405-83.797z" />
13
+ <glyph unicode="&#x25;" glyph-name="fi-align-left" horiz-adv-x="1018" d="M967.339 960h-917.333c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h917.333c27.617 0 50.005 22.388 50.005 50.005v46.251c0 27.617-22.388 50.005-50.005 50.005zM50.005 521.387h670.208c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005h-670.208c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-27.617 22.388-50.005 50.005-50.005zM867.157 82.261h-817.152c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h817.152c27.617 0 50.005 22.388 50.005 50.005v0 46.080c0 27.617-22.388 50.005-50.005 50.005zM50.005 228.523h570.197c27.617 0 50.005 22.388 50.005 50.005v0 46.080c0 27.617-22.388 50.005-50.005 50.005h-570.197c0 0 0 0 0 0-27.557 0-49.908-22.291-50.005-49.825v-46.089c0-27.617 22.388-50.005 50.005-50.005z" />
14
+ <glyph unicode="&#x26;" glyph-name="fi-align-right" horiz-adv-x="1018" d="M967.339 960h-917.333c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h917.333c27.617 0 50.005 22.388 50.005 50.005v46.251c0 27.617-22.388 50.005-50.005 50.005zM967.339 667.477h-670.208c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-27.617 22.388-50.005 50.005-50.005h670.208c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005zM967.168 82.261h-816.981c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h816.981c27.617 0 50.005 22.388 50.005 50.005v0 46.080c0 27.617-22.388 50.005-50.005 50.005zM1017.515 324.779c0 27.617-22.388 50.005-50.005 50.005h-570.197c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-27.617 22.388-50.005 50.005-50.005h570.027c27.617 0 50.005 22.388 50.005 50.005v0 46.080z" />
15
+ <glyph unicode="&#x27;" glyph-name="fi-quote-2" d="M214.357 82.432c-117.589 0-219.477 101.888-214.357 237.568 8.021 222.037 243.029 386.56 426.667 493.568l54.955-46.933c-131.413-78.336-259.755-199.168-267.264-339.456-5.12-141.141 167.083-206.165 167.083-211.627-2.56-73.045-75.776-133.291-167.083-133.291zM757.589 82.261c-117.419 0-219.307 102.4-214.187 237.568 7.851 221.867 242.859 386.389 425.643 493.568l54.955-46.763c-130.731-78.336-258.56-199.168-266.411-339.456-5.12-141.141 167.083-206.165 167.083-211.627-2.56-73.045-75.776-133.291-167.083-133.291z" />
16
+ <glyph unicode="&#x28;" glyph-name="fi-check" d="M1010.005 741.035l-68.267 68.267c-8.68 8.854-20.766 14.343-34.133 14.343s-25.453-5.489-34.126-14.335l-503.304-505.181-221.867 221.867c-8.68 8.854-20.766 14.343-34.133 14.343s-25.453-5.489-34.126-14.335l-68.274-68.274c-8.854-8.68-14.343-20.766-14.343-34.133s5.489-25.453 14.335-34.126l290.824-288.093c17.296-17.297 41.19-27.996 67.584-27.996s50.288 10.699 67.584 27.996l572.245 572.075c8.854 8.68 14.343 20.766 14.343 34.133s-5.489 25.453-14.335 34.126z" />
17
+ <glyph unicode="&#x29;" glyph-name="fi-close" horiz-adv-x="774" d="M505.344 448l256 256c8.075 8.115 13.067 19.304 13.067 31.659s-4.992 23.544-13.069 31.66l-55.465 54.612c-8.115 8.075-19.304 13.067-31.659 13.067s-23.544-4.992-31.66-13.069l-255.998-255.998-256 256c-8.042 7.814-19.032 12.632-31.147 12.632s-23.105-4.818-31.157-12.643l-55.115-54.944c-7.974-8.097-12.898-19.217-12.898-31.488s4.924-23.391 12.903-31.494l255.994-255.994-256-256c-8.075-8.115-13.067-19.304-13.067-31.659s4.992-23.544 13.069-31.66l55.124-54.612c8.096-8.116 19.291-13.137 31.659-13.137s23.563 5.021 31.658 13.136l256.001 256.001 256-256c8.115-8.075 19.304-13.067 31.659-13.067s23.544 4.992 31.66 13.069l54.953 54.953c8.075 8.115 13.067 19.304 13.067 31.659s-4.992 23.544-13.069 31.66z" />
18
+ <glyph unicode="&#x2a;" glyph-name="fi-asterisk" horiz-adv-x="976" d="M960.341 301.397v0 0.853l-251.904 145.749 253.269 146.091c8.431 5.256 13.959 14.479 13.959 24.993 0 5.373-1.444 10.409-3.964 14.742l0.075-0.14-80.384 139.264c-5.26 8.415-14.473 13.93-24.975 13.93-5.106 0-9.907-1.304-14.089-3.596l0.153 0.077-255.147-145.237v293.376c-0.464 15.61-13.047 28.133-28.637 28.501l-161.827 0.001c-15.552-0.46-28.041-12.949-28.5-28.458l-0.001-0.043v-292.864l-254.123 146.603c-3.946 2.123-8.634 3.37-13.614 3.37-10.762 0-20.164-5.826-25.224-14.495l-0.075-1.163-81.408-139.093c-2.216-4.030-3.519-8.831-3.519-13.937 0-10.502 5.515-19.716 13.807-24.904l0.123-0.072 254.464-146.944-247.979-143.189c-2.348-0.69-4.386-1.561-6.292-2.637-8.651-5.101-14.464-14.526-14.464-25.307 0-5.353 1.433-10.371 3.936-14.693l-0.075 0.141 83.115-144.043c5.422-6.48 13.512-10.571 22.558-10.571 5.392 0 10.444 1.454 14.786 3.99l-0.139-0.075 252.928 145.92v-285.355c0-2.048 0-4.437 0-6.656 0-0.053-0.001-0.116-0.001-0.179 0-16.212 13.143-29.355 29.355-29.355 0.24 0 0.48 0.003 0.719 0.009l165.511-0.001c13.945 3.117 24.262 15.243 24.575 29.833l0.001 0.034v292.011l247.808-142.677c1.6-1.533 3.39-2.889 5.327-4.023 4.333-2.527 9.378-3.976 14.761-3.976 10.73 0 20.115 5.757 25.235 14.35l0.074 0.135 83.115 144.043c1.14 3.009 1.8 6.488 1.8 10.122 0 10.777-5.807 20.197-14.463 25.302z" />
19
+ <glyph unicode="&#x2b;" glyph-name="fi-cross-close" d="M1024 448c0 282.77-229.23 512-512 512s-512-229.23-512-512c0-282.77 229.23-512 512-512s512 229.23 512 512zM680.107 235.349c-5.961-5.964-14.198-9.652-23.296-9.652s-17.335 3.689-23.296 9.652l-121.515 121.515-121.515-121.515c-5.961-5.964-14.198-9.652-23.296-9.652s-17.335 3.689-23.296 9.652l-49.835 49.835c-5.964 5.961-9.652 14.198-9.652 23.296s3.689 17.335 9.652 23.296l121.515 121.515-121.515 121.515c-5.964 5.961-9.652 14.198-9.652 23.296s3.689 17.335 9.652 23.296l49.835 49.835c5.961 5.964 14.198 9.652 23.296 9.652s17.335-3.689 23.296-9.652l121.515-120.832 121.515 121.515c5.961 5.964 14.198 9.652 23.296 9.652s17.335-3.689 23.296-9.652l49.835-49.835c5.964-5.961 9.652-14.198 9.652-23.296s-3.689-17.335-9.652-23.296l-121.515-121.515 121.515-121.515c5.964-5.961 9.652-14.198 9.652-23.296s-3.689-17.335-9.652-23.296z" />
20
+ <glyph unicode="&#x2c;" glyph-name="fi-clock" d="M512 823.467c207.365 0 375.467-168.102 375.467-375.467s-168.102-375.467-375.467-375.467c-207.365 0-375.467 168.102-375.467 375.467 0.677 207.091 168.375 374.79 375.401 375.466zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM774.144 638.293l-53.248 53.248c-4.962 4.662-11.661 7.527-19.029 7.527s-14.067-2.864-19.044-7.54l-170.652-170.653-93.696 93.696c-4.946 4.7-11.65 7.591-19.029 7.591s-14.083-2.891-19.041-7.602l-53.065-53.066c-4.951-4.865-8.020-11.631-8.021-19.114 0-0.020 0-0.043 0-0.066 0-7.378 3.001-14.055 7.85-18.877l165.719-165.719c4.849-4.851 11.549-7.851 18.95-7.851 0.058 0 0.116 0 0.174 0.001h1.015c7.274 0.098 13.834 3.079 18.603 7.851l242.347 242.347c4.857 4.876 7.86 11.602 7.86 19.029s-3.003 14.153-7.861 19.030z" />
21
+ <glyph unicode="&#x2d;" glyph-name="fi-minus" horiz-adv-x="980" d="M935.083 531.627h-890.368c-24.656-0.097-44.618-20.058-44.715-44.705v-77.833c0.097-24.656 20.058-44.618 44.705-44.715h890.377c24.656 0.097 44.618 20.058 44.715 44.705v77.833c-0.097 24.656-20.058 44.618-44.705 44.715z" />
22
+ <glyph unicode="&#x2e;" glyph-name="fi-social-android" horiz-adv-x="867" d="M572.928 866.475l44.032 80.555c0.696 1.23 1.106 2.7 1.106 4.267 0 4.852-3.933 8.786-8.786 8.786-3.286 0-6.15-1.804-7.657-4.475l-44.567-80.94c-36.42 16.441-78.958 26.021-123.733 26.021s-87.314-9.579-125.677-26.801l-42.6 81.505c-1.513 2.739-4.383 4.563-7.68 4.563-4.829 0-8.744-3.915-8.744-8.744 0-1.533 0.394-2.974 1.087-4.226l44.009-80.51c-85.319-42.218-143.333-127.969-145.064-227.44l569.17-0.229c-1.801 99.634-59.797 185.306-143.562 226.824zM303.787 741.888c-13.196 0-23.893 10.697-23.893 23.893s10.697 23.893 23.893 23.893c13.196 0 23.893-10.697 23.893-23.893s-10.697-23.893-23.893-23.893zM563.029 741.888c-13.196 0-23.893 10.697-23.893 23.893s10.697 23.893 23.893 23.893c13.196 0 23.893-10.697 23.893-23.893s-10.697-23.893-23.893-23.893zM866.816 565.589c0 34.922-28.31 63.232-63.232 63.232s-63.232-28.31-63.232-63.232v-264.533c0-34.922 28.31-63.232 63.232-63.232s63.232 28.31 63.232 63.232zM716.8 616.96h-565.931v-409.6c0-37.703 30.564-68.267 68.267-68.267h45.909v-139.947c0-34.875 28.272-63.147 63.147-63.147s63.147 28.272 63.147 63.147v139.947h85.333v-139.947c0-34.922 28.31-63.232 63.232-63.232s63.232 28.31 63.232 63.232v139.947h45.397c12.636 0.101 24.409 3.707 34.419 9.893 20.1 11.527 33.657 33.090 33.847 57.835zM63.147 628.736c-34.836-0.097-63.050-28.311-63.147-63.137v-264.713c0-34.922 28.31-63.232 63.232-63.232s63.232 28.31 63.232 63.232v264.704c0 0 0 0 0 0 0 34.875-28.272 63.147-63.147 63.147-0.060 0-0.12 0-0.18 0z" />
23
+ <glyph unicode="&#x2f;" glyph-name="fi-pencil" d="M0-34.987c-0.395-1.591-0.622-3.418-0.622-5.298 0-6.68 2.864-12.692 7.432-16.873 4.214-4.6 10.225-7.464 16.906-7.464 1.88 0 3.707 0.227 5.455 0.655l312.163 95.029 674.133 674.133c4.857 4.876 7.86 11.602 7.86 19.029s-3.003 14.153-7.861 19.030l-208.212 208.895c-4.849 4.847-11.546 7.845-18.944 7.845s-14.095-2.998-18.944-7.845l-674.304-674.816zM88.235 24.917l60.757 199.168 139.093-139.093z" />
24
+ <glyph unicode="&#x30;" glyph-name="fi-unlock" horiz-adv-x="808" d="M767.147 528.896h-507.563v93.696c-0.006 0.491-0.009 1.072-0.009 1.653 0 75.487 56.723 137.726 129.872 146.418 4.812 0.483 9.589 0.72 14.422 0.72 72.754 0 132.97-53.685 143.195-123.602 1.489-12.067 10.93-20.741 22.433-20.922h144.061c12.49 0.060 22.592 10.2 22.592 22.698 0 0.601-0.023 1.196-0.069 1.785-13.165 171.030-153.621 305.322-326.153 308.653-186.354 3.077-338.93-153.595-338.93-341.328v-90.453h-29.696c-0.002 0-0.004 0-0.006 0-22.57 0-40.912-18.104-41.295-40.583v-510.329c0-22.81 18.491-41.301 41.301-41.301h725.845c22.81 0 41.301 18.491 41.301 41.301v510.293c0 22.81-18.491 41.301-41.301 41.301z" />
25
+ <glyph unicode="&#x31;" glyph-name="fi-user-hero-points-trophy" horiz-adv-x="819" d="M795.648 769.195c0 13.007-10.545 23.552-23.552 23.552h-99.499v85.333s0 1.536 0 2.219c0.006 0.255 0.010 0.554 0.010 0.855 0 19.866-16.011 35.992-35.832 36.18h-480.786c-18.655-1.461-33.244-16.941-33.28-35.836s0-1.54 0-2.222v-85.333h-99.157c-0.001 0-0.002 0-0.002 0-13.007 0-23.552-10.545-23.552-23.552 0-0.12 0.001-0.24 0.003-0.359v0.018-322.048c0.097-12.934 10.604-23.381 23.551-23.381 0 0 0 0 0.001 0h102.4c17.299-112.496 100.743-201.565 208.74-226.959l1.862-157.382h-122.88c-16.966 0-30.72-13.754-30.72-30.72s13.754-30.72 30.72-30.72h368.299c16.966 0 30.72 13.754 30.72 30.72s-13.754 30.72-30.72 30.72h-122.88v157.013c109.86 25.763 193.304 114.833 210.408 225.792l102.595 1.536c0.007 0 0.014 0 0.022 0 12.647 0 22.966 9.969 23.528 22.477l0.002 0.051v322.048zM123.051 486.059h-61.611v245.248h61.611zM734.379 486.059h-61.781v245.248h61.269z" />
26
+ <glyph unicode="&#x32;" glyph-name="fi-user-reputation-points" d="M1021.44 565.76c-25.429-116.736-243.712-207.872-509.44-207.872-282.795 0-512 103.253-512 230.741v-140.629c0-127.488 229.205-230.741 512-230.741s512 103.253 512 230.741c-0.030 8.12-0.961 16.008-2.698 23.587zM512 76.629c-282.795 0-512 103.253-512 230.741v-140.629c0-127.488 229.205-230.741 512-230.741s512 103.253 512 230.741v140.629c0-127.488-229.205-230.741-512-230.741zM1024 729.259c0-127.659-229.205-230.059-512-230.059s-512 102.4-512 230.059 229.205 230.741 512 230.741 512-103.253 512-230.741z" />
27
+ <glyph unicode="&#x33;" glyph-name="fi-user-star-level-up" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM753.835 103.936l-241.835 168.277-241.835-168.277 85.333 281.941-234.837 178.176 294.571 5.973 96.768 278.357 96.768-278.357 294.571-5.973-234.837-178.005z" />
28
+ <glyph unicode="&#x34;" glyph-name="fi-map" d="M846.165 15.872l24.235-11.605 32.597-14.677 25.6 57.003-56.661 25.941zM921.6 803.669l-42.155 24.405h-1.365l-11.264 6.656-31.915-53.931 53.931-31.915zM1006.933 753.152l-45.397 26.624-31.915-53.931 37.205-21.845h57.173v18.944c0.004 0.192 0.006 0.418 0.006 0.644 0 12.57-6.795 23.553-16.912 29.477zM961.365 4.267l-15.36-34.133 46.933-20.992c2.607-1.187 5.653-1.878 8.862-1.878 0.065 0 0.129 0 0.194 0.001h-0.010c12.281 0.557 22.027 10.649 22.027 23.018 0 0.248-0.004 0.495-0.012 0.741l0.001 75.74h-62.635zM961.365 658.261h62.635v-93.867h-62.635v93.867zM961.365 345.429h62.635v-93.867h-62.635v93.867zM961.365 501.76h62.635v-93.867h-62.635v93.867zM961.365 188.928h62.635v-93.867h-62.635v93.867zM798.379 811.691l28.16 47.616-7.339 4.267-20.48 11.093-193.536-102.4-179.712 97.28h-1.365c-1.831 0.635-3.971 1.116-6.184 1.354-1.859 0.565-3.887 0.986-5.977 1.196-2.342-0.206-4.37-0.627-6.312-1.242-2.12-0.166-4.262-0.648-6.293-1.366l-0.834 0.058-179.883-97.28-179.541 97.28c-3.779 1.93-8.243 3.061-12.971 3.061s-9.192-1.131-13.136-3.137c-7.174-3.055-12.354-9.947-12.972-18.113l-0.004-788.552c0.277-7.992 4.945-14.831 11.654-18.206l193.146-105.186h1.195c3.582-1.678 7.778-2.657 12.203-2.657s8.621 0.979 12.383 2.732l0.843-0.076 179.541 97.621 180.565-97.621h1.195c3.601-1.724 7.827-2.731 12.288-2.731 0.034 0 0.074 0 0.114 0 4.423 0 8.61 1.007 12.345 2.805l0.853-0.074 180.395 96.597 4.608-0.853 25.6 57.003-30.549 14.507zM202.411 9.557l-136.533 73.557v702.293l136.533-73.557zM426.667 98.987v700.757l161.451-87.893v-699.733z" />
29
+ <glyph unicode="&#x35;" glyph-name="fi-link" d="M937.301 873.301c-53.634 53.723-127.776 86.958-209.68 86.958-76.505 0-146.238-28.998-198.807-76.602l0.252 0.225-149.845-149.845c-25.641-25.678-46.572-56.068-61.381-89.757-31.625-15.29-58.179-32.491-81.399-53.332l0.273 0.241-150.016-149.504c-52.643-53.447-85.149-126.857-85.149-207.859 0-163.629 132.648-296.277 296.277-296.277 81.002 0 154.411 32.506 207.896 85.186l149.808 149.809c20.597 22.947 37.798 49.501 50.462 78.489 36.317 17.445 66.707 38.376 92.389 64.021l149.671 150.013c47.233 52.28 76.134 121.907 76.134 198.285 0 81.784-33.137 155.828-86.717 209.439zM404.651 129.195v0c-27.058-27.058-64.439-43.794-105.728-43.794-82.579 0-149.522 66.943-149.522 149.522 0 41.289 16.736 78.67 43.794 105.728v0l109.227 109.227c27.506-103.779 107.646-183.862 209.402-210.823zM485.888 421.717c-24.767 24.736-40.86 58.152-43.325 95.295 74.658-4.508 134.018-63.81 139.045-138.017-37.57 2.016-70.991 18.113-95.717 42.89zM840.021 564.736l-118.613-118.613c-27.443 103.758-107.527 183.842-209.232 210.822l107.344 109.861 9.216 9.216c26.131 22.897 60.586 36.864 98.304 36.864 82.569 0 149.504-66.935 149.504-149.504 0-37.718-13.967-72.173-37.012-98.476z" />
30
+ <glyph unicode="&#x36;" glyph-name="fi-unlink" horiz-adv-x="1025" d="M129.536 783.36l109.397-110.080c5.875-5.875 13.99-9.508 22.955-9.508 17.929 0 32.463 14.534 32.463 32.463 0 8.964-3.634 17.080-9.508 22.955l-108.885 109.568c-5.652 4.91-13.084 7.903-21.215 7.903-17.909 0-32.427-14.518-32.427-32.427 0-8.131 2.993-15.563 7.936-21.254zM318.635 826.88l39.765-150.357c3.88-13.945 16.466-24.008 31.403-24.008 17.972 0 32.541 14.569 32.541 32.541 0 3.036-0.416 5.974-1.193 8.762l-39.711 149.275c-3.878 13.899-16.427 23.926-31.317 23.926-17.927 0-32.459-14.532-32.459-32.459 0-3.036 0.417-5.975 1.196-8.762zM127.829 567.467v0l149.845-40.107c2.559-0.725 5.497-1.142 8.533-1.142 17.927 0 32.459 14.532 32.459 32.459 0 14.891-10.027 27.439-23.697 31.263l-149.562 40.332c-2.559 0.725-5.497 1.142-8.533 1.142-17.927 0-32.459-14.532-32.459-32.459 0-14.891 10.027-27.439 23.697-31.263zM895.147 112.64l-110.080 110.080c-5.875 5.875-13.99 9.508-22.955 9.508-17.929 0-32.463-14.534-32.463-32.463 0-8.964 3.634-17.080 9.508-22.955l109.568-109.568c5.771-5.373 13.536-8.671 22.072-8.671 17.909 0 32.427 14.518 32.427 32.427 0 8.493-3.265 16.224-8.609 22.005zM706.048 69.12l-40.448 150.357c-3.88 13.945-16.466 24.008-31.403 24.008-17.972 0-32.541-14.569-32.541-32.541 0-3.036 0.416-5.974 1.193-8.762l40.052-149.616c3.878-13.899 16.427-23.926 31.317-23.926 17.927 0 32.459 14.532 32.459 32.459 0 3.036-0.417 5.975-1.196 8.762zM896.853 328.533v0l-149.845 40.107c-2.559 0.725-5.497 1.142-8.533 1.142-17.927 0-32.459-14.532-32.459-32.459 0-14.891 10.027-27.439 23.697-31.263l150.074-40.161c2.559-0.725 5.497-1.142 8.533-1.142 17.927 0 32.459 14.532 32.459 32.459 0 14.891-10.027 27.439-23.697 31.263zM492.032 428.203c-40.919 40.905-97.441 66.205-159.872 66.205-58.335 0-111.51-22.088-151.619-58.358l0.196 0.174-114.347-114.347c-38.111-40.385-61.537-94.988-61.537-155.062 0-124.89 101.243-226.133 226.133-226.133 60.074 0 114.677 23.425 155.173 61.64l114.236 114.243c36.095 39.914 58.183 93.089 58.183 151.424 0 62.431-25.3 118.953-66.206 159.873zM417.963 192l-109.397-109.397c-20.662-20.514-49.128-33.193-80.555-33.193-63.151 0-114.345 51.194-114.345 114.345 0 31.724 12.919 60.43 33.783 81.145l109.404 109.404c19.827 17.113 45.846 27.537 74.3 27.537 62.963 0 114.005-51.042 114.005-114.005 0-28.453-10.424-54.472-27.661-74.446zM958.464 893.781c-40.919 40.905-97.441 66.205-159.872 66.205-58.335 0-111.51-22.088-151.619-58.358l0.196 0.174-114.347-114.347c-37.354-40.216-60.276-94.288-60.276-153.712 0-124.89 101.243-226.133 226.133-226.133 59.467 0 113.573 22.954 153.941 60.486l114.207 114.218c36.095 39.914 58.183 93.089 58.183 151.424 0 62.431-25.3 118.953-66.206 159.873zM884.224 658.091l-109.397-109.397c-19.918-17.349-46.131-27.926-74.814-27.926-63.058 0-114.176 51.118-114.176 114.176 0 29.023 10.829 55.518 28.668 75.662l-0.104-0.12 109.397 109.397c19.827 17.113 45.846 27.537 74.3 27.537 62.963 0 114.005-51.042 114.005-114.005 0-28.453-10.424-54.472-27.661-74.446z" />
31
+ <glyph unicode="&#x37;" glyph-name="fi-list-number" d="M74.923 690.005l-41.643-41.813 16.043-16.896 22.016 22.357v-95.915h28.16v132.267h-24.576zM51.2 357.376c10.923 0 21.504-5.632 21.504-17.067 0-17.067-15.872-29.696-69.973-69.803v-22.187h99.669v24.576h-53.76c34.133 24.917 52.907 44.544 52.907 67.243 0 26.283-22.187 42.155-51.2 42.155-0.385 0.008-0.839 0.012-1.293 0.012-19.679 0-37.412-8.326-49.871-21.648l16.007-18.641c8.674 9.463 21.091 15.373 34.888 15.373 0.395 0 0.788-0.005 1.18-0.014zM73.557 6.656c15.583 1.746 27.742 14.315 28.837 29.935 0.006 22.118-18.938 35.942-49.829 35.942-0.979 0.053-2.125 0.083-3.277 0.083-18.944 0-35.996-8.101-47.88-21.028l13.952-17.113c8.612 8.446 20.422 13.658 33.449 13.658 0.241 0 0.481-0.002 0.721-0.005 13.617 0 24.54-5.12 24.54-15.701s-9.899-14.165-24.576-14.165c-4.949 0-14.165 0-17.067 0v-25.429h17.067c18.432 0 26.624-4.779 26.624-15.36s-8.875-17.067-24.917-17.067c-0.037 0-0.081 0-0.125 0-14.15 0-26.959 5.74-36.226 15.018l-14.849-18.261c12.162-13.097 29.476-21.266 48.697-21.266 1.301 0 2.593 0.037 3.875 0.111 31.567-0.008 52.047 16.035 52.047 38.904-0.683 16.957-14.020 30.59-30.788 31.738zM981.845 685.909h-773.803c-23.281 0-42.155-18.873-42.155-42.155v-38.912c0-23.281 18.873-42.155 42.155-42.155h773.803c23.281 0 42.155 18.873 42.155 42.155v38.912c0 23.281-18.873 42.155-42.155 42.155zM981.845 377.685h-773.803c-23.281 0-42.155-18.873-42.155-42.155v-38.912c0-23.281 18.873-42.155 42.155-42.155h773.803c0 0 0 0 0 0 23.221 0 42.057 18.776 42.154 41.975v39.092c0 23.281-18.873 42.155-42.155 42.155zM981.845 69.291h-773.803c-23.281 0-42.155-18.873-42.155-42.155v-38.912c0-23.281 18.873-42.155 42.155-42.155h773.803c23.281 0 42.155 18.873 42.155 42.155v38.912c0 23.281-18.873 42.155-42.155 42.155z" />
32
+ <glyph unicode="&#x38;" glyph-name="fi-list-bullet" d="M982.528 662.187h-759.125c-22.904 0-41.472-18.568-41.472-41.472v-38.229c0-22.904 18.568-41.472 41.472-41.472h759.125c22.904 0 41.472 18.568 41.472 41.472v38.229c0 22.904-18.568 41.472-41.472 41.472zM982.528 359.595h-759.125c-22.904 0-41.472-18.568-41.472-41.472v-38.229c0-22.904 18.568-41.472 41.472-41.472h759.125c0 0 0 0 0 0 22.904 0 41.472 18.568 41.472 41.472 0 0.060 0 0.12 0 0.18v38.049c0 22.904-18.568 41.472-41.472 41.472zM982.528 57.003h-759.125c-22.904 0-41.472-18.568-41.472-41.472v-38.229c0.097-22.831 18.627-41.301 41.472-41.301 0 0 0 0 0 0h759.125c22.904 0 41.472 18.568 41.472 41.472v38.229c0 22.904-18.568 41.472-41.472 41.472zM60.587 662.187c-33.461 0-60.587-27.126-60.587-60.587s27.126-60.587 60.587-60.587c33.461 0 60.587 27.126 60.587 60.587s-27.126 60.587-60.587 60.587zM60.587 371.712c-33.461-0.001-60.586-27.126-60.586-60.587s27.126-60.587 60.587-60.587c33.461 0 60.587 27.126 60.587 60.587 0 0.12 0 0.24-0.001 0.36 0 33.443-27.125 60.568-60.587 60.568zM60.587 57.173c-33.461 0-60.587-27.126-60.587-60.587s27.126-60.587 60.587-60.587c33.461 0 60.587 27.126 60.587 60.587s-27.126 60.587-60.587 60.587z" />
33
+ <glyph unicode="&#x39;" glyph-name="fi-lock" horiz-adv-x="808" d="M767.147 528.896h-29.696v97.963c-8.285 177.386-154.114 318.065-332.8 318.065s-324.515-140.679-332.772-317.323l-0.028-98.705h-30.549c-22.81 0-41.301-18.491-41.301-41.301v-510.293c0-22.81 18.491-41.301 41.301-41.301h725.845c22.81 0 41.301 18.491 41.301 41.301v510.293c0 22.81-18.491 41.301-41.301 41.301zM259.584 626.859c0 79.835 64.719 144.555 144.555 144.555s144.555-64.719 144.555-144.555v-97.963h-289.109z" />
34
+ <glyph unicode="&#x3a;" glyph-name="fi-code" horiz-adv-x="1647" d="M7.68 417.792c-4.757 4.731-7.702 11.28-7.702 18.517s2.944 13.787 7.7 18.516l96.257 95.575 290.133 290.133c4.849 4.847 11.546 7.845 18.944 7.845s14.095-2.998 18.944-7.845l76.971-76.8c4.847-4.849 7.845-11.546 7.845-18.944s-2.998-14.095-7.845-18.944l-290.133-290.133 290.133-290.133c4.847-4.849 7.845-11.546 7.845-18.944s-2.998-14.095-7.845-18.944l-76.971-76.8c-4.849-4.847-11.546-7.845-18.944-7.845s-14.095 2.998-18.944 7.845l-290.133 290.133zM1639.595 417.792c4.757 4.731 7.702 11.28 7.702 18.517s-2.944 13.787-7.7 18.516l-96.428 95.575-290.133 290.133c-4.849 4.847-11.546 7.845-18.944 7.845s-14.095-2.998-18.944-7.845l-76.8-76.8c-4.847-4.849-7.845-11.546-7.845-18.944s2.998-14.095 7.845-18.944l290.133-290.133-290.133-290.133c-4.847-4.849-7.845-11.546-7.845-18.944s2.998-14.095 7.845-18.944l76.8-76.8c4.849-4.847 11.546-7.845 18.944-7.845s14.095 2.998 18.944 7.845l290.133 290.133zM694.955-62.464l-102.4 37.376c-10.309 3.77-17.534 13.493-17.534 24.904 0 3.315 0.61 6.487 1.723 9.411l339.395 933.706c3.811 10.23 13.495 17.384 24.85 17.384 3.335 0 6.526-0.617 9.465-1.743l102.219-37.315c10.23-3.811 17.384-13.495 17.384-24.85 0-3.335-0.617-6.526-1.743-9.465l-339.566-933.877c-3.77-10.309-13.493-17.534-24.904-17.534-3.315 0-6.487 0.61-9.411 1.723z" />
35
+ <glyph unicode="&#x3b;" glyph-name="fi-quote" d="M121.515 523.776c-0.889 0.044-1.931 0.070-2.978 0.070-7.62 0-14.927-1.339-21.7-3.794 16.254 48.403 48.287 87.687 89.963 112.438l0.934 0.513h0.853c4.36 2.199 7.299 6.642 7.299 11.771 0 4.647-2.412 8.73-6.052 11.067l-0.052 0.031-51.2 31.915c-2.158 1.841-4.98 2.962-8.064 2.962-2.242 0-4.345-0.592-6.163-1.629l0.061 0.032c-73.388-49.549-121.696-131.41-124.407-224.705-0.009-79.423 51.191-124.309 108.193-124.309 53.055 0.286 96.021 43.073 96.597 96.031 0.102 1.586 0.16 3.374 0.16 5.175 0 45.526-36.906 82.432-82.432 82.432-0.116 0-0.232 0-0.348-0.001zM368.981 523.776c-0.889 0.044-1.931 0.070-2.978 0.070-7.62 0-14.927-1.339-21.7-3.794 16.218 48.471 48.258 87.819 89.964 112.608l0.933 0.513c4.36 2.199 7.299 6.642 7.299 11.771 0 4.647-2.412 8.73-6.052 11.067l-0.052 0.031-51.2 31.915c-2.158 1.841-4.98 2.962-8.064 2.962-2.242 0-4.345-0.592-6.163-1.629l0.061 0.032c-73.989-49.575-122.695-131.902-125.261-225.752-0.008-79.4 51.192-124.286 108.194-124.286 52.835 0.572 95.513 43.25 96.085 96.031 0.102 1.586 0.16 3.374 0.16 5.175 0 45.526-36.906 82.432-82.432 82.432-0.116 0-0.232 0-0.348-0.001zM668.501 555.861c-52.835-0.572-95.513-43.25-96.085-96.031-0.102-1.586-0.16-3.374-0.16-5.175 0-45.526 36.906-82.432 82.432-82.432 0.116 0 0.232 0 0.348 0.001 0.864-0.044 1.896-0.068 2.935-0.068 7.629 0 14.945 1.338 21.726 3.793-16.234-48.464-48.27-87.807-89.966-112.609l-0.932-0.513h-0.853c-4.36-2.199-7.299-6.642-7.299-11.771 0-4.647 2.412-8.73 6.052-11.067l0.052-0.031 51.2-31.915c2.183-1.753 4.97-2.835 8.007-2.901 2.206 0.033 4.258 0.598 6.057 1.57l-0.070-0.034c75.435 53.419 125.269 134.997 125.269 226.133 0 79.019-51.2 123.904-108.203 123.904zM915.797 555.861c-53.055-0.286-96.021-43.073-96.597-96.031-0.102-1.586-0.16-3.374-0.16-5.175 0-45.526 36.906-82.432 82.432-82.432 0.116 0 0.232 0 0.348 0.001 0.909-0.048 1.994-0.076 3.085-0.076 7.636 0 14.959 1.341 21.746 3.8-16.144-48.328-47.991-87.592-89.465-112.44l-0.921-0.511h-0.853c-4.36-2.199-7.299-6.642-7.299-11.771 0-4.647 2.412-8.73 6.052-11.067l0.052-0.031 51.2-31.915c2.183-1.753 4.97-2.835 8.007-2.901 2.206 0.033 4.258 0.598 6.057 1.57l-0.070-0.034c74.752 52.395 124.587 133.803 124.587 225.109 0 79.019-51.2 123.904-108.203 123.904z" />
36
+ <glyph unicode="&#x3c;" glyph-name="fi-style-type" d="M600.235-4.608c0-0.042 0-0.092 0-0.143 0-15.931-7.276-30.162-18.685-39.552-11.343-10.55-26.453-17.019-43.073-17.137-0.026 0-0.030 0-0.033 0-11.14 0-21.521 3.244-30.253 8.839-9.496 6.164-17 15.152-21.316 25.776l-44.678 99.359h-283.307l-44.373-98.645c-4.412-10.932-11.786-19.9-21.129-26.154-8.647-5.591-18.965-8.837-30.041-8.837-0.251 0-0.501 0.002-0.75 0.005-16.766 0.139-32.034 6.598-43.532 17.111-11.636 9.226-19.065 23.426-19.065 39.361 0 0.006 0 0.013 0 0.019 0.497 9.522 2.9 18.373 6.832 26.334l225.616 474.401c5.839 13.038 15.402 23.536 27.33 30.381 11.701 6.853 25.389 10.801 39.998 10.801s28.297-3.948 40.055-10.835c11.808-6.995 21.526-17.206 27.932-29.427l225.816-475.714c3.869-7.822 6.285-16.984 6.652-26.671zM203.093 171.691h194.731l-96.939 217.429zM980.48 319.317q43.52-43.861 43.52-134.144v-188.928c0.067-1.036 0.105-2.247 0.105-3.466 0-15.424-6.089-29.425-15.995-39.732-10.73-9.683-25.041-15.619-40.738-15.619-1.273 0-2.536 0.039-3.789 0.116-0.367-0.026-1-0.037-1.635-0.037-16.095 0-30.664 6.534-41.2 17.094-10.549 10.354-17.086 24.76-17.086 40.694 0 0.514 0.007 1.026 0.020 1.537l-0.002 5.727c-7.996-20.951-22.288-37.999-40.536-49.25-18.994-11.008-41.281-17.361-65.052-17.361-1.28 0-2.555 0.018-3.826 0.055-0.297-0.009-0.87-0.012-1.443-0.012-26.924 0-52.375 6.304-74.959 17.516-20.968 10.24-38.97 26.053-51.962 45.498-12.607 18.963-19.936 41.675-19.936 66.099 0 0.451 0.003 0.902 0.007 1.353-0.104 1.659-0.163 3.679-0.163 5.713 0 24.818 8.756 47.591 23.347 65.398 19.243 18.899 44.285 32.287 72.24 37.242 38.061 7.624 80.858 11.917 124.658 11.917 5.548 0 11.080-0.069 16.595-0.206l20.858 0.016v15.019c0.19 1.951 0.299 4.218 0.299 6.51 0 16.996-5.972 32.597-15.932 44.819-11.911 9.935-27.533 16.048-44.582 16.048-2.294 0-4.563-0.111-6.8-0.327-37.555-3.095-72.498-12.15-104.744-26.231-7.318-4.335-18.437-7.661-30.26-8.382-0.641-0.028-1.133-0.038-1.627-0.038-11.135 0-21.095 5.030-27.732 12.942-6.891 8.683-11.027 19.729-11.027 31.74 0 0.861 0.021 1.718 0.063 2.569-0.029 0.454-0.044 1.126-0.044 1.802 0 9.556 2.815 18.454 7.661 25.911 6.169 8.019 14.031 14.681 23.056 19.429 21.018 11.107 44.941 19.783 70.137 24.97 26.728 6.037 55.41 9.331 84.859 9.347q90.294 0 133.814-43.861zM880.981 47.616c14.043 15.93 22.615 36.976 22.615 60.024 0 1.398-0.032 2.789-0.094 4.172l0.007 13.969h-14.165c-4.533 0.256-9.837 0.403-15.176 0.403-28.403 0-55.84-4.137-81.741-11.842-13.531-4.937-24.486-19.494-24.486-36.61 0-0.748 0.021-1.491 0.062-2.228-0.023-0.401-0.033-0.993-0.033-1.586 0-13.9 5.691-26.471 14.87-35.51 9.691-9.115 22.769-14.712 37.154-14.712 0.62 0 1.238 0.010 1.853 0.031 0.789-0.038 1.821-0.059 2.857-0.059 22.309 0 42.392 9.534 56.396 24.749zM571.904 537.941l19.797 53.589c19.302 51.135 58.945 90.778 108.798 109.654l55.042 19.882-53.589 19.797c-51.135 19.302-90.778 58.945-109.654 108.798l-20.394 55.554-19.797-53.76c-19.302-51.135-58.945-90.778-108.798-109.654l-55.042-20.735 53.589-19.797c51.122-19.322 90.758-58.958 109.653-108.798zM889.685 445.781l13.483 36.352c13.184 34.97 40.294 62.080 74.388 74.973l37.569 13.773-36.693 13.653c-34.97 13.184-62.080 40.294-74.973 74.388l-13.773 37.569-13.483-36.693c-13.221-35-40.396-62.12-74.557-74.974l-37.571-13.772 36.693-13.483c35-13.221 62.12-40.396 74.974-74.557z" />
37
+ <glyph unicode="&#x3d;" glyph-name="fi-plus" horiz-adv-x="980" d="M935.083 531.627h-361.472v361.472c0 0 0 0.001 0 0.001 0 24.669-19.902 44.691-44.526 44.884h-78.013c-24.695 0-44.715-20.019-44.715-44.715v-361.643h-361.643c-24.656-0.097-44.618-20.058-44.715-44.705v-77.833c0.097-24.656 20.058-44.618 44.705-44.715h361.652v-361.472c0-24.695 20.019-44.715 44.715-44.715h77.995c24.656 0.097 44.618 20.058 44.715 44.705v361.481h361.301c24.656 0.097 44.618 20.058 44.715 44.705v77.833c-0.097 24.656-20.058 44.618-44.705 44.715z" />
38
+ <glyph unicode="&#x3e;" glyph-name="fi-fast-forward" d="M1024 448c-0.004 9.861-5.897 18.345-14.353 22.125l-0.154 0.061-526.336 304.811c-4.361 4.245-10.324 6.863-16.898 6.863-13.277 0-24.061-10.677-24.233-23.913v-214.203l-400.896 231.253c-4.361 4.245-10.324 6.863-16.898 6.863-13.277 0-24.061-10.677-24.233-23.913v-619.707c0-0.009 0-0.020 0-0.032 0-13.384 10.85-24.235 24.235-24.235 6.743 0 12.842 2.753 17.235 7.197l400.386 231.256v-214.187c0-0.009 0-0.020 0-0.032 0-13.384 10.85-24.235 24.235-24.235 6.743 0 12.842 2.753 17.235 7.197l529.069 305.325c7.014 4.329 11.619 11.973 11.619 20.692 0 0.286-0.005 0.57-0.015 0.853z" />
39
+ <glyph unicode="&#x3f;" glyph-name="fi-question" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM552.789 170.667c-11.513-10.623-26.956-17.137-43.921-17.137-1.059 0-2.113 0.025-3.16 0.076-0.751-0.050-1.805-0.076-2.864-0.076-16.965 0-32.408 6.514-43.966 17.177-11.108 11.186-18 26.656-18 43.736s6.893 32.549 18.048 43.779c12.419 10.757 28.738 17.313 46.589 17.313s34.17-6.556 46.681-17.392c11.062-11.151 17.955-26.621 17.955-43.7s-6.893-32.549-18.048-43.779zM676.352 527.531c-14.593-25.881-32.311-48.004-53.036-66.882l-32.638-31.081c-18.585-17.435-31.085-41.162-34.087-67.765l-1.582-24.907h-102.4c-0.104 2.643-0.163 5.746-0.163 8.863 0 28.82 5.063 56.457 14.347 82.072 11.385 24.359 28.247 46.249 49.016 63.625 18.67 15.401 34.551 32.639 47.867 51.794 8.039 12.997 12.482 27.729 12.496 43.498q0 68.271-62.464 68.271c-0.543 0.017-1.181 0.026-1.822 0.026-17.84 0-33.952-7.398-45.435-19.293-11.575-12.699-18.652-29.637-18.652-48.228 0-0.751 0.012-1.5 0.035-2.246l-116.056 0.109c-0.089 1.957-0.14 4.251-0.14 6.558 0 44.597 19.006 84.754 49.36 112.815 32.988 27.163 75.53 43.576 121.907 43.576 3.801 0 7.575-0.11 11.321-0.328q84.816 0.024 131.067-40.936c28.949-26.748 47.016-64.908 47.016-107.288 0-3.024-0.092-6.026-0.273-9.004 0.020 0.268 0.021 0.101 0.021-0.066 0-23.235-5.614-45.158-15.561-64.488z" />
40
+ <glyph unicode="&#x40;" glyph-name="fi-at-sign" d="M1024 448c0 0.094 0 0.205 0 0.316 0 282.77-229.23 512-512 512s-512-229.23-512-512c0-282.77 229.23-512 512-512 91.978 0 178.291 24.254 252.894 66.714 5.881 1.727 11.779 9.644 11.779 18.94 0 8.449-4.872 15.759-11.96 19.276l-0.125 0.056-89.088 54.613c-3.681 3.179-8.513 5.115-13.797 5.115-3.297 0-6.417-0.754-9.199-2.099l0.126 0.055c-41.375-17.071-89.413-26.983-139.766-26.983-207.365 0-375.467 168.102-375.467 375.467s168.102 375.467 375.467 375.467c194.738 0 354.849-148.253 373.626-338.052 0.125-138.090-59.609-214.378-106.371-214.378-25.259 0-44.373 17.067-44.373 54.101 0.586 10.629 1.864 20.525 3.809 30.179l56.607 270.536c0.039 0.435 0.062 0.94 0.062 1.451s-0.022 1.016-0.066 1.515c0.005 9.927-8.095 18.026-18.086 18.026h-98.645c-8.664-0.322-15.735-6.748-17.053-15.088l-0.013-0.102-10.069-48.469c-25.259 45.568-76.8 80.384-150.187 80.384-139.264 0-271.36-133.291-271.36-294.229 0-116.395 69.632-201.728 186.197-201.728 71.825 3.066 134.397 40.097 172.402 95.342l1.678-6.424c8.363-45.568 134.315-103.424 206.507-103.424 103.765 0 226.475 70.485 226.475 272.213v0c0 7.68 0 15.36 0 23.040zM602.283 354.475c-26.453-37.205-69.632-79.189-133.291-79.189s-98.475 43.179-98.475 105.643c0 87.723 68.267 174.080 164.523 174.080 0.515 0.009 1.121 0.014 1.73 0.014 42.16 0 78.523-24.816 95.279-60.638z" />
41
+ <glyph unicode="&#x41;" glyph-name="fi-paperclip" horiz-adv-x="927" d="M200.533-64c-51.493 1.136-97.52 23.616-129.751 58.91-61.908 61.751-69.588 121.314-65.321 160.396 7.914 52.328 33.104 97.701 69.471 131.097l392.695 392.679c109.568 109.568 182.443 69.461 216.235 35.84 40.789-40.789 68.267-111.275-36.693-215.381l-361.301-361.472-70.315 70.997 361.131 360.448c55.637 55.637 42.837 68.267 36.693 74.752s-19.797 19.797-75.435-35.84l-392.533-392.533c-20.474-18.44-35.098-43.015-40.978-70.817-3.054-26.463 8.893-52.063 36.37-79.711 34.133-34.133 59.904-30.549 68.267-29.355 30.677 7.419 56.812 23.685 76.316 45.914l465.551 465.745c32.166 29.338 56.871 66.308 71.298 108.071 14.547 53.038-2.178 100.313-50.648 148.782-51.2 51.2-133.291 104.448-257.536-19.968l-428.715-429.739c-9.043-9.107-21.57-14.744-35.413-14.744-27.56 0-49.901 22.342-49.901 49.901 0 13.716 5.534 26.14 14.491 35.16l429.224 429.736c133.291 132.779 278.528 140.117 398.677 19.797 93.184-93.184 93.184-183.979 76.629-243.712-19.472-60.91-53.065-112.682-97.048-153.387l-465.811-465.621c-34.177-37.539-79.86-64.066-131.449-74-8.080-1.219-15.674-1.778-23.399-1.778-0.281 0-0.562 0.001-0.843 0.002z" />
42
+ <glyph unicode="&#x42;" glyph-name="fi-bold" horiz-adv-x="854" d="M657.067 464.043c96.768 19.968 176.64 107.52 176.64 234.837 0 136.704-99.84 261.12-294.912 261.12h-491.691c-26.015 0-47.104-21.089-47.104-47.104v-929.792c0-26.015 21.089-47.104 47.104-47.104h508.587c196.608 0 297.643 122.88 297.643 277.845 0 127.488-85.333 234.155-196.267 250.197zM217.941 768h273.067c73.728 0 119.467-44.544 119.467-107.52 0-66.048-46.080-107.52-119.467-107.52h-273.067zM500.395 127.829h-282.453v233.472h282.624c84.48 0 130.56-52.224 130.56-116.736 0-73.728-49.152-116.736-130.56-116.736z" />
43
+ <glyph unicode="&#x43;" glyph-name="fi-crop" horiz-adv-x="1028" d="M993.343 183.651h-90.771v591.382c0 0.856 0 1.713 0 2.569 0 33.106-26.837 59.943-59.943 59.943h-592.581v88.202c0 18.918-15.336 34.253-34.253 34.253h-57.032c-18.918 0-34.253-15.336-34.253-34.253v0-88.373h-90.257c-18.918 0-34.253-15.336-34.253-34.253v-57.374c0-18.918 15.336-34.253 34.253-34.253h90.771v-590.697c0-0.856 0-1.713 0-2.569 0-33.106 26.837-59.943 59.943-59.943h592.581v-88.716c0-18.918 15.336-34.253 34.253-34.253h57.374c18.918 0 34.253 15.336 34.253 34.253v89.058h89.915c18.918 0 34.253 15.336 34.253 34.253v56.86c0 18.918-15.336 34.253-34.253 34.253zM249.535 183.993v528.527h528.013v-528.87h-527.5z" />
44
+ <glyph unicode="&#x44;" glyph-name="fi-photo-picture" d="M1024 747.52c0 29.22-23.687 52.907-52.907 52.907-1.175 0.096-2.544 0.151-3.925 0.151s-2.75-0.055-4.104-0.162l0.179 0.353h-910.336c0 0-0.001 0-0.001 0-29.22 0-52.907-23.687-52.907-52.907 0-0.12 0-0.24 0.001-0.36v0.018-764.245c2.858-26.681 25.25-47.277 52.453-47.277 0.16 0 0.319 0.001 0.478 0.002h909.8v1.195c2.769-0.531 5.955-0.835 9.211-0.835 26.829 0 48.838 20.635 51.022 46.9l1.036 0.186v764.075zM906.069 53.931h-128.683c-0.44 2.001-1.087 3.768-1.935 5.414l0.058-0.123-268.971 466.261c-5.996 12.317-18.418 20.656-32.789 20.656-14.766 0-27.477-8.804-33.167-21.45l-179.292-310.502-43.861 75.947c-3.219 6.282-9.649 10.507-17.067 10.507s-13.848-4.225-17.017-10.399l-65.415-112.577v504.832h788.139zM726.699 623.275c65.98 0 119.467-53.487 119.467-119.467s-53.487-119.467-119.467-119.467c-65.98 0-119.467 53.487-119.467 119.467s53.487 119.467 119.467 119.467z" />
45
+ <glyph unicode="&#x45;" glyph-name="fi-refresh" horiz-adv-x="1001" d="M999.595 858.624c-0.539 11.636-10.103 20.865-21.823 20.865-4.598 0-8.864-1.42-12.383-3.846l-92.087-66.512c-92.294 91.448-219.348 147.953-359.598 147.953-282.204 0-510.976-228.772-510.976-510.976s228.772-510.976 510.976-510.976c175.688 0 330.668 88.667 422.63 223.693 3.844 5.786 5.457 10.731 5.457 16.052 0 8.765-4.375 16.507-11.061 21.163l-128.596 90.168c-4.304 2.932-9.618 4.682-15.341 4.682-9.403 0-17.703-4.724-22.657-11.927-55.279-81.86-147.613-134.911-252.338-134.911-167.588 0-303.445 135.857-303.445 303.445s135.857 303.445 303.445 303.445c71.259 0 136.78-24.562 188.56-65.682l-15.131-9.932-85.333-61.611c-5.509-4.016-9.048-10.447-9.048-17.705 0-9.562 6.143-17.688 14.698-20.649l367.257-125.145c2.119-0.76 4.563-1.2 7.111-1.2 4.765 0 9.171 1.538 12.749 4.144 5.281 3.849 8.77 10.008 8.983 16.991z" />
46
+ <glyph unicode="&#x46;" glyph-name="fi-animation-video" horiz-adv-x="1263" d="M1174.357 908.8h-1085.099c-49.296 0-89.259-39.962-89.259-89.259v-743.083c0-49.296 39.962-89.259 89.259-89.259h1085.099c49.002 0.387 88.576 40.2 88.576 89.256 0 0.001 0 0.002 0 0.003v743.082c0 0.001 0 0.002 0 0.003 0 49.056-39.574 88.869-88.539 89.256zM252.757 91.307c0-16.401-13.295-29.696-29.696-29.696h-119.467c-16.253 0.193-29.355 13.413-29.355 29.694 0 0.001 0 0.001 0 0.002v73.557c0 0 0 0 0 0 0 16.401 13.295 29.696 29.696 29.696 0.060 0 0.12 0 0.18-0.001h119.457c16.401 0 29.696-13.295 29.696-29.696zM252.757 731.136c0-16.401-13.295-29.696-29.696-29.696h-119.467c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 0.052-0.001 0.114-0.001 0.175 0 16.401 13.295 29.696 29.696 29.696 0.18 0 0.36-0.002 0.539-0.005h119.44c16.179-0.288 29.185-13.471 29.185-29.692 0-0.062 0-0.123-0.001-0.185zM564.907 91.307c0-16.401-13.295-29.696-29.696-29.696h-119.467c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 16.401 13.295 29.696 29.696 29.696h119.467c16.401 0 29.696-13.295 29.696-29.696zM564.907 731.136c0-16.401-13.295-29.696-29.696-29.696h-119.467c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 16.401 13.295 29.696 29.696 29.696h119.467c16.401 0 29.696-13.295 29.696-29.696zM877.056 91.307c0-16.401-13.295-29.696-29.696-29.696h-119.467c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 16.401 13.295 29.696 29.696 29.696h119.467c16.401 0 29.696-13.295 29.696-29.696zM877.056 731.136c0-16.401-13.295-29.696-29.696-29.696h-119.467c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 16.401 13.295 29.696 29.696 29.696h119.467c16.401 0 29.696-13.295 29.696-29.696zM1189.205 91.307c0-16.401-13.295-29.696-29.696-29.696h-118.443c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 16.401 13.295 29.696 29.696 29.696h119.467c16.401 0 29.696-13.295 29.696-29.696zM1189.205 731.136c0-16.401-13.295-29.696-29.696-29.696h-118.443c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 0.051 0 0.111 0 0.171 0 16.401 13.295 29.696 29.696 29.696 0 0 0 0 0 0h119.467c15.954-0.567 28.673-13.638 28.673-29.678 0-0.066 0-0.132-0.001-0.199z" />
47
+ <glyph unicode="&#x47;" glyph-name="fi-thumbnails" d="M200.875 960h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-165.035c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v165.035c0 19.794-16.046 35.84-35.84 35.84zM594.432 960h-164.864c-19.794 0-35.84-16.046-35.84-35.84v-165.035c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v165.035c0 0 0 0 0 0 0 19.794-16.046 35.84-35.84 35.84-0.060 0-0.12 0-0.18 0zM1024 924.16c0 19.794-16.046 35.84-35.84 35.84h-165.035c-19.794 0-35.84-16.046-35.84-35.84v0-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864zM200.875 566.272h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-165.035c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v165.035c0 19.794-16.046 35.84-35.84 35.84zM594.432 566.272h-164.864c-19.794 0-35.84-16.046-35.84-35.84v-165.035c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v165.035c0 19.794-16.046 35.84-35.84 35.84zM988.16 566.272h-165.035c-19.794 0-35.84-16.046-35.84-35.84v0-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864c0 19.794-16.046 35.84-35.84 35.84zM200.875 172.544h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864c0 19.794-16.046 35.84-35.84 35.84zM594.432 172.544h-164.864c-19.794 0-35.84-16.046-35.84-35.84v-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864c0 19.794-16.046 35.84-35.84 35.84zM988.16 172.544h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864c0 19.794-16.046 35.84-35.84 35.84z" />
48
+ <glyph unicode="&#x48;" glyph-name="fi-help-support" d="M989.867 631.637c-7.098 18.287-24.554 31.016-44.983 31.016-6.033 0-11.807-1.11-17.128-3.137l-14.006-5.18c-44.074 84.36-111.225 151.511-193.089 194.394l2.796 15.526c1.895 4.965 2.992 10.707 2.992 16.706 0 20.352-12.633 37.754-30.485 44.791-54.809 21.677-117.927 34.179-183.964 34.179s-129.155-12.502-187.114-35.269c-14.81-5.894-27.539-23.351-27.539-43.78 0-6.033 1.11-11.807 3.137-17.128l5.18-14.006c-84.36-44.074-151.511-111.225-194.394-193.089l-15.526 2.796c-4.965 1.895-10.707 2.992-16.706 2.992-20.352 0-37.754-12.633-44.791-30.485-21.677-54.809-34.179-117.927-34.179-183.964s12.502-129.155 35.269-187.114c5.894-14.81 23.351-27.539 43.78-27.539 6.033 0 11.807 1.11 17.128 3.137l14.006 5.18c44.083-84.353 111.231-151.501 193.089-194.393l-2.795-15.527c-1.895-4.965-2.992-10.707-2.992-16.706 0-20.352 12.633-37.754 30.485-44.791 54.785-21.656 117.873-34.146 183.878-34.146s129.093 12.49 187.029 35.235c14.81 5.895 27.539 23.351 27.539 43.781 0 6.033-1.11 11.807-3.137 17.128l-5.18 14.006c84.422 44.057 151.629 111.21 194.564 193.091l15.527-2.797c4.965-1.895 10.707-2.992 16.706-2.992 20.352 0 37.754 12.633 44.791 30.485 21.656 54.785 34.146 117.873 34.146 183.878s-12.49 129.093-35.235 187.029zM305.152 365.397l-226.133-83.627c-19.522 49.344-30.84 106.508-30.84 166.315s11.318 116.97 31.93 169.465l10.174-7.246 214.869-79.531c-10.091-24.452-15.95-52.843-15.95-82.603s5.859-58.15 16.487-84.082zM512 911.872c0.020 0 0.044 0 0.068 0 59.758 0 116.869-11.337 169.297-31.979l-7.232-10.176-79.531-214.869c-24.452 10.091-52.843 15.95-82.603 15.95s-58.15-5.859-84.082-16.487l-82.147 226.67c49.292 19.553 106.403 30.891 166.161 30.891 0.024 0 0.048 0 0.072 0zM512-15.701c-0.020 0-0.044 0-0.068 0-59.758 0-116.869 11.337-169.297 31.979l86.763 225.045c24.452-10.091 52.843-15.95 82.603-15.95s58.15 5.859 84.082 16.487l82.147-226.67c-49.301-19.615-106.427-31.011-166.209-31.061zM674.133 513.195c7.926-19.144 12.529-41.376 12.529-64.683s-4.603-45.539-12.949-65.836c-1.787-4.171-3.069-10.354-3.069-16.837 0-20.603 12.946-38.182 31.147-45.047l5.793-2.158c-17.663-26.282-39.596-48.214-65.032-65.341l-2.893 4.925c-6.974 18.532-24.553 31.478-45.156 31.478-6.483 0-12.666-1.282-18.311-3.606-18.824-7.81-41.056-12.413-64.362-12.413s-45.539 4.603-65.836 12.949c-4.13 1.75-10.262 3.009-16.689 3.009-20.58 0-38.144-12.918-45.024-31.088l-2.158-5.792c-26.211 17.68-48.086 39.609-65.169 65.027l4.923 2.898c18.532 6.974 31.478 24.553 31.478 45.156 0 6.483-1.282 12.666-3.606 18.311-7.81 18.824-12.413 41.056-12.413 64.362s4.603 45.539 12.949 65.836c1.75 4.13 3.009 10.262 3.009 16.689 0 20.58-12.918 38.144-31.088 45.024l-5.792 2.158c17.637 26.198 39.509 48.070 64.864 65.171l2.891-4.926c6.974-18.532 24.553-31.478 45.156-31.478 6.483 0 12.666 1.282 18.311 3.606 18.823 7.818 41.054 12.426 64.362 12.426s45.54-4.608 65.834-12.962c4.173-1.787 10.356-3.069 16.839-3.069 20.603 0 38.182 12.946 45.047 31.147l2.158 5.793c26.269-17.621 48.198-39.496 65.343-64.868l-4.927-2.886c-18.501-6.99-31.419-24.554-31.419-45.134 0-6.426 1.26-12.559 3.545-18.163zM944.981 281.771l-11.264 4.096-214.869 79.531c10.091 24.452 15.95 52.843 15.95 82.603s-5.859 58.15-16.487 84.082l226.67 82.147c19.522-49.344 30.84-106.508 30.84-166.315s-11.318-116.97-31.93-169.465z" />
49
+ <glyph unicode="&#x49;" glyph-name="fi-info" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM564.224 163.157c0-9.426-7.641-17.067-17.067-17.067h-69.291c-9.426 0-17.067 7.641-17.067 17.067v330.752c0 9.426 7.641 17.067 17.067 17.067h68.267c9.426 0 17.067-7.641 17.067-17.067zM512 585.387c-34.109 0.386-61.611 28.126-61.611 62.29 0 0.061 0 0.123 0 0.184 0 34.3 27.813 62.113 62.123 62.113s62.123-27.813 62.123-62.123c0 0 0 0 0 0 0-34.498-27.966-62.464-62.464-62.464-0.060 0-0.12 0-0.18 0z" />
50
+ <glyph unicode="&#x4a;" glyph-name="fi-home" horiz-adv-x="933" d="M919.893 612.352l-439.637 340.48c-5.728 4.501-13.043 7.218-20.992 7.218s-15.264-2.717-21.066-7.274l-425.569-340.766c-7.718-6.297-12.612-15.802-12.629-26.45v-615.427c0-18.851 15.282-34.133 34.133-34.133h252.757c18.851 0 34.133 15.282 34.133 34.133v376.832h291.328v-376.832c0-18.851 15.282-34.133 34.133-34.133h252.757c18.851 0 34.133 15.282 34.133 34.133v615.424c-0.040 10.857-5.142 20.514-13.068 26.739z" />
51
+ <glyph unicode="&#x4b;" glyph-name="fi-heart" horiz-adv-x="1066" d="M1064.619 599.723c0 2.901 0 5.973 0 8.875s0 6.485 0 9.899 0 11.093 0 17.067c0 2.389 0 4.608 0 6.827 0 6.997-0.853 13.995-1.707 20.992 0 1.024 0 2.048 0 2.901-7.166 56.63-32.754 106.261-70.47 143.686-52.324 51.4-124.098 83.119-203.279 83.119s-150.955-31.72-203.307-83.146c-39.723-41.089-44.672-54.742-52.864-54.742s-13.483 13.141-53.419 53.76c-51.377 51.152-122.234 82.774-200.476 82.774-0.26 0-0.52 0-0.78-0.001-1.041 0.015-2.318 0.023-3.596 0.023-78.494 0-149.586-31.693-201.177-82.981-37.803-37.152-63.585-86.453-71.016-141.575-0.139-2.283-0.139-3.307-0.139-4.161 0-6.997-1.365-13.824-1.707-20.992q0-3.413 0-6.827c0-5.461 0-11.093 0-17.067s0-6.485 0-9.728 0-6.144 0-9.045c8.14-70.080 31.594-133.365 66.928-188.283l-1.050 1.744c2.389-3.755 4.096-7.68 6.656-11.435 96.256-149.845 375.637-397.141 459.435-397.141v0c83.968 0 363.179 247.979 459.776 397.824 2.389 3.755 4.267 7.68 6.656 11.435v0c34.217 53.55 57.47 117.289 65.018 185.758z" />
52
+ <glyph unicode="&#x4c;" glyph-name="fi-lightbulb" horiz-adv-x="693" d="M692.907 613.547c0 0.114 0 0.249 0 0.384 0 191.341-155.112 346.453-346.453 346.453s-346.453-155.112-346.453-346.453c0-103.281 45.193-196.007 116.883-259.48 16.89-14.701 27.326-35.713 27.501-59.166v-44.063c0-0.051 0-0.111 0-0.171 0-23.187 18.797-41.984 41.984-41.984 0 0 0 0 0 0h320.171c23.187 0 41.984 18.797 41.984 41.984v44.203c0.203 23.426 10.635 44.375 27.040 58.628 72.14 63.639 117.344 156.172 117.344 259.263 0 0.142 0 0.283 0 0.425zM530.432 74.581h-367.957c-9.991 0-18.091 8.099-18.091 18.091v39.424c0 9.991 8.099 18.091 18.091 18.091h367.957c9.991 0 18.091-8.099 18.091-18.091v-39.424c0-9.991-8.099-18.091-18.091-18.091zM465.579-64h-238.933c-9.991 0-18.091 8.099-18.091 18.091v39.253c0 9.991 8.099 18.091 18.091 18.091h238.933c9.991 0 18.091-8.099 18.091-18.091v-39.424c-0.097-9.918-8.159-17.92-18.090-17.92 0 0-0.001 0-0.001 0z" />
53
+ <glyph unicode="&#x4d;" glyph-name="fi-arrow-location" horiz-adv-x="1032" d="M430.080-59.904l-429.227 1005.397c-0.524 1.201-0.829 2.601-0.829 4.072 0 5.75 4.661 10.411 10.411 10.411 1.471 0 2.871-0.305 4.139-0.855l1013.693-434.833c2.667-0.908 4.552-3.391 4.552-6.315s-1.885-5.406-4.505-6.301l-367.834-112.654c-47.538-14.921-84.376-51.253-99.702-97.401l-118.069-361.010c-0.908-2.667-3.391-4.552-6.315-4.552s-5.406 1.885-6.301 4.505z" />
54
+ <glyph unicode="&#x4e;" glyph-name="fi-arrow-pointer-cursor" horiz-adv-x="641" d="M208.213 248.832l-170.667-128.171c-3.885-2.982-8.815-4.779-14.165-4.779-12.913 0-23.381 10.468-23.381 23.381 0 0 0 0.001 0 0.001v797.355c-0.004 0.167-0.007 0.364-0.007 0.562 0 12.913 10.468 23.381 23.381 23.381 6.471 0 12.327-2.628 16.561-6.876l593.921-599.041c4.145-4.216 6.704-10.003 6.704-16.387 0-12.913-10.468-23.381-23.381-23.381-0.137 0-0.273 0.001-0.409 0.004h-208.193l129.536-276.48c1.385-2.898 2.195-6.3 2.195-9.89 0-9.31-5.442-17.349-13.318-21.111l-147.256-68.327c-2.898-1.385-6.3-2.195-9.89-2.195-9.31 0-17.349 5.442-21.111 13.318z" />
55
+ <glyph unicode="&#x4f;" glyph-name="fi-plugin-2" horiz-adv-x="645" d="M568.491 655.701l2.731 274.603c0.001 0.101 0.002 0.221 0.002 0.341 0 16.212-13.143 29.355-29.355 29.355-0.001 0-0.001 0-0.002 0h-87.040c-16.055-0.093-29.068-12.987-29.354-28.986l-2.731-275.312h-200.021l2.731 274.432c0.003 0.152 0.004 0.332 0.004 0.512 0 16.154-13.048 29.26-29.179 29.354h-87.049c-0.001 0-0.003 0-0.004 0-16.126 0-29.233-12.929-29.521-28.986l-2.731-275.312h-76.971v-168.96c0.699-144.669 96.73-266.722 228.462-306.607l5.010-214.268c0.049-8.233 3.581-15.631 9.196-20.803 5.313-5.089 12.508-8.21 20.432-8.21 0.024 0 0.048 0 0.072 0h-0.004c29.355 0 45.568 0.853 61.781 1.536s31.573 1.365 59.904 1.536c0.001 0 0.001 0 0.002 0 16.281 0 29.501 13.101 29.694 29.336v209.597c133.939 40.538 229.895 162.573 230.57 307.121v169.039z" />
56
+ <glyph unicode="&#x50;" glyph-name="fi-plugins" d="M552.789 654.336h-122.539v-200.021h119.467c2.567-0.199 5.558-0.312 8.576-0.312 27.747 0 53.258 9.568 73.416 25.586 17.148 16.574 27.949 40.068 27.949 66.085 0 2.143-0.073 4.27-0.218 6.376 0.091 1.159 0.133 2.849 0.133 4.549 0 26.935-10.721 51.366-28.129 69.259-19.352 17.702-45.265 28.562-73.714 28.562-1.498 0-2.988-0.030-4.471-0.090zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM703.829 420.864q-55.296-46.933-154.965-46.933h-118.613v-212.651h-99.669v573.44h219.307q96.256 0 152.747-50.005c34.806-30.999 56.621-75.939 56.621-125.974 0-2.333-0.047-4.655-0.141-6.965 0.161-2.289 0.247-5.355 0.247-8.44 0-48.739-21.416-92.476-55.351-122.315z" />
57
+ <glyph unicode="&#x51;" glyph-name="fi-trash" horiz-adv-x="845" d="M788.651 828.416c0.052 0 0.113 0.001 0.175 0.001 16.598 0 30.087-13.311 30.374-29.84v-88.091c-0.19-16.512-13.525-29.847-30.019-30.037h-732.69c-0.125-0.002-0.272-0.003-0.42-0.003-8.153 0-15.512 3.403-20.733 8.867l-0.010 0.011c-5.475 5.258-8.877 12.639-8.877 20.815 0 0.122 0.001 0.244 0.002 0.366v-0.019 88.064c-0.001 0.103-0.002 0.225-0.002 0.348 0 8.176 3.402 15.557 8.867 20.806l0.010 0.009c5.258 5.475 12.639 8.877 20.815 8.877 0.122 0 0.244-0.001 0.366-0.002h247.448v37.376c0.19 16.512 13.525 29.847 30.019 30.037h177.17c16.512-0.19 29.847-13.525 30.037-30.019v-37.565zM748.373 626.005c16.512-0.19 29.847-13.525 30.037-30.019v-629.949c0.003-0.149 0.004-0.325 0.004-0.501 0-8.034-3.191-15.324-8.374-20.67l0.007 0.008c-5.204-5.479-12.543-8.887-20.678-8.887-0.29 0-0.58 0.004-0.868 0.013l0.042-0.001h-651.776c-0.267-0.009-0.582-0.014-0.897-0.014-8.113 0-15.43 3.41-20.594 8.875l-0.013 0.013c-5.276 5.332-8.536 12.668-8.536 20.765 0 0.14 0.001 0.279 0.003 0.419v-0.021 629.931c-0.002 0.118-0.003 0.258-0.003 0.397 0 8.097 3.26 15.434 8.539 20.768l-0.003-0.003c5.177 5.479 12.494 8.889 20.607 8.889 0.315 0 0.63-0.005 0.943-0.015l-0.046 0.001z" />
58
+ <glyph unicode="&#x52;" glyph-name="fi-arrow-return-back" d="M957.099 501.248h-760.32l198.144 197.973c3.329 3.122 5.403 7.548 5.403 12.459s-2.074 9.336-5.393 12.45l-51.209 51.209c-3.122 3.329-7.548 5.403-12.459 5.403s-9.336-2.074-12.45-5.393l-250.547-251.913-63.317-63.317c-3.118-3.093-5.048-7.38-5.048-12.117s1.93-9.024 5.047-12.116l314.54-314.54c3.122-3.329 7.548-5.403 12.459-5.403s9.336 2.074 12.45 5.393l51.209 51.209c3.329 3.122 5.403 7.548 5.403 12.459s-2.074 9.336-5.393 12.45l-198.836 197.299h703.829c9.426 0 17.067-7.641 17.067-17.067v-140.288c0-3.413 6.485-6.315 14.507-6.315h77.141c8.021 0 14.507 2.901 14.507 6.315v196.779c0 36.949-29.953 66.901-66.901 66.901z" />
59
+ <glyph unicode="&#x53;" glyph-name="fi-star" d="M1022.635 572.928c-3.255 9.924-12.398 16.98-23.2 17.067h-346.293l-117.931 333.312c-3.443 9.687-12.531 16.499-23.211 16.499s-19.767-6.811-23.157-16.327l-117.984-334.166h-346.283c-13.554-0.025-24.532-11.018-24.532-24.576 0-7.796 3.63-14.744 9.292-19.247l270.386-214.055-121.003-342.357c-0.92-2.477-1.453-5.339-1.453-8.325 0-13.573 11.003-24.576 24.576-24.576 4.699 0 9.091 1.319 12.824 3.607l317.333 190.403 317.44-190.293c3.626-2.227 8.017-3.546 12.717-3.546 13.573 0 24.576 11.003 24.576 24.576 0 2.986-0.533 5.848-1.508 8.495l-120.948 342.016 270.336 214.016c5.646 4.542 9.228 11.45 9.228 19.194 0 2.907-0.505 5.696-1.431 8.284z" />
60
+ <glyph unicode="&#x54;" glyph-name="fi-themes" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM739.499 654.507h-178.859v-493.227h-98.816v493.056h-177.323v80.384h454.997z" />
61
+ <glyph unicode="&#x55;" glyph-name="fi-underline" horiz-adv-x="990" d="M941.397 33.451h-894.293c-26.816 0-48.555-21.739-48.555-48.555s21.739-48.555 48.555-48.555h894.293c26.91 0 48.725 21.815 48.725 48.725s-21.815 48.725-48.725 48.725zM494.933 89.6c256.853 0 382.805 146.944 382.805 365.568v457.387c-0.097 26.164-21.281 47.349-47.436 47.445h-62.303c-26.164-0.097-47.349-21.281-47.445-47.436s0-1.204 0-1.887v-452.267c-0.341-140.288-78.507-232.277-225.621-232.277s-225.109 91.989-225.109 232.277v452.267s0 1.195 0 1.707c0 0 0 0.001 0 0.001 0 26.298-21.318 47.616-47.616 47.616-0.12 0-0.24 0-0.36-0.001h-62.104c-26.164-0.097-47.349-21.281-47.445-47.436v-458.079c0-218.453 126.635-364.885 382.635-364.885z" />
62
+ <glyph unicode="&#x56;" glyph-name="fi-infinity" horiz-adv-x="1365" d="M1085.611 748.373c-141.995 0-297.472-78.507-402.944-198.997-105.472 120.491-261.12 198.997-402.944 198.997-135.339 0-279.723-78.507-279.723-300.373s144.384-300.373 279.723-300.373c141.995 0 297.472 78.507 402.944 198.997 105.472-120.491 260.949-198.997 402.944-198.997 135.339 0 279.723 78.507 279.723 300.373s-144.384 300.373-279.723 300.373zM279.723 267.776c-103.253 0-155.648 60.757-155.648 180.224s52.395 180.224 155.648 180.224c114.176 0 246.613-74.069 328.021-180.224-81.408-106.155-214.016-180.224-328.021-180.224zM1085.611 267.776c-114.176 0-246.784 74.069-328.192 180.224 81.408 106.155 214.016 180.224 328.192 180.224 103.253 0 155.477-60.757 155.477-180.224s-52.224-180.224-155.477-180.224z" />
63
+ <glyph unicode="&#x57;" glyph-name="fi-web-globe-world" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM925.696 495.275h-125.611c-9.899 146.603-64.853 273.067-143.019 343.040 144.888-55.283 249.655-184.947 268.267-341.061zM460.8 789.333v-293.547h-141.141c11.093 146.773 73.045 256 140.629 293.547zM460.288 400.213v-293.547c-68.267 37.888-129.195 146.261-140.629 292.523zM555.861 103.595v296.107h148.309c-11.776-151.723-77.824-262.827-148.309-296.619zM555.861 495.616v297.131c70.656-34.133 136.533-145.237 148.309-297.472zM366.763 838.315c-78.165-70.656-133.12-196.267-143.019-343.040h-125.44c18.804 158.093 123.57 287.757 265.597 342.078zM98.475 399.701h125.44c10.069-146.261 64.853-271.531 142.848-341.333-144.368 55.070-248.893 183.969-268.084 339.305zM657.237 58.368c77.995 70.485 132.949 195.755 142.848 341.333h125.44c-19.395-157.364-123.919-286.263-265.426-340.372z" />
64
+ <glyph unicode="&#x58;" glyph-name="fi-alert" d="M1020.245-2.048v0l-1.707 2.901c-0.944 1.815-1.85 3.322-2.836 4.771l-465.132 806.066c-7.59 13.891-22.097 23.155-38.768 23.155-18.005 0-33.485-10.806-40.31-26.287l-0.111-0.282-461.653-799.915c-6.060-7.461-9.73-17.076-9.73-27.548 0-0.155 0.001-0.31 0.002-0.465 0-24.483 19.866-44.35 44.373-44.35h935.253c0.040 0 0.088 0 0.136 0 24.412 0 44.203 19.79 44.203 44.203 0 6.422-1.369 12.524-3.832 18.030zM512 19.627c-0.203-0.002-0.443-0.004-0.683-0.004-35.005 0-63.393 28.329-63.488 63.312-0.054 0.995-0.085 2.148-0.085 3.309 0 35.252 28.577 63.829 63.829 63.829s63.829-28.577 63.829-63.829c0-1.161-0.031-2.314-0.092-3.459 0.007-34.809-28.341-63.158-63.311-63.158zM575.317 579.755v-349.355c0-14.233-11.538-25.771-25.771-25.771h-75.093c-0.102-0.001-0.222-0.002-0.342-0.002-14.268 0-25.845 11.519-25.941 25.764v348.51s0 0 0 1.024c0.055 13.529 10.527 24.594 23.807 25.595l77.74 0.005c0.052 0 0.114 0.001 0.176 0.001 14.053 0 25.479-11.248 25.765-25.233v-0.027z" />
65
+ <glyph unicode="&#x59;" glyph-name="fi-paypal" horiz-adv-x="1009" d="M233.301 113.664l44.885 193.195c7.59 27.926 32.257 48.3 61.84 49.32l37.318 0.003c159.232 0 282.624 32.768 371.371 97.963 80.655 55.619 132.844 147.504 132.844 251.578 0 2.215-0.024 4.425-0.071 6.628 0.144 2.73 0.222 6.316 0.222 9.922 0 39.028-9.219 75.903-25.599 108.566-16.178 30.55-40.557 56.516-70.202 74.749-33.285 20.163-71.204 34.707-111.679 41.837-47.247 8.11-99.386 12.581-152.57 12.581-1.056 0-2.113-0.002-3.168-0.005h-271.537c-29.765-1.458-54.414-21.771-62.345-49.182l-183.415-797.154c-1.003-3.287-1.581-7.066-1.581-10.979 0-21.491 17.421-38.912 38.912-38.912 0.736 0 1.468 0.020 2.194 0.061l129.947-0.004c29.943 0.993 54.806 21.619 62.188 49.37zM339.456 576l39.253 168.96c7.495 28.082 32.294 48.584 62.023 49.491l42.767 0.002c49.835 0 87.552-8.533 113.152-25.429 22.931-15.537 37.803-41.467 37.803-70.871 0-2.327-0.093-4.632-0.276-6.912 0.167-2.112 0.252-4.932 0.252-7.772 0-46.969-23.083-88.547-58.523-114.010-39.672-28.958-94.115-43.294-164.6-43.294h-31.915c-0.662-0.040-1.436-0.063-2.216-0.063-21.491 0-38.912 17.421-38.912 38.912 0 3.853 0.56 7.576 1.603 11.090zM984.576 701.781c-16.747 31.847-41.005 57.746-70.504 75.978l-8.003 4.576 2.731-4.949c15.743-31.277 24.962-68.164 24.962-107.204 0-3.593-0.078-7.167-0.233-10.721 0.059-1.368 0.083-3.577 0.083-5.792 0-104.074-52.189-195.959-131.823-250.912-89.767-65.861-213.33-98.458-372.391-98.629h-36.864c-29.787-1.026-54.528-21.474-62.015-49.027l-45.164-193.49c-7.487-28.216-32.35-48.841-62.185-49.832l-88.173-0.003-5.973-25.941c-1.005-3.29-1.584-7.072-1.584-10.989 0-21.491 17.421-38.912 38.912-38.912 0.797 0 1.589 0.024 2.375 0.071l129.94-0.005c29.943 0.993 54.806 21.619 62.188 49.37l44.99 193.83c7.639 27.895 32.278 48.242 61.834 49.319l37.494 0.003c159.232 0 282.624 32.768 371.371 97.963 80.656 55.582 132.849 147.442 132.849 251.492 0 2.305-0.026 4.604-0.077 6.897 0.145 2.729 0.224 6.328 0.224 9.946 0 39.016-9.22 75.879-25.6 108.528z" />
66
+ <glyph unicode="&#x5a;" glyph-name="fi-wand-magic" horiz-adv-x="868" d="M658.432 470.187l106.325 106.325c4.546 4.541 7.358 10.817 7.358 17.749s-2.812 13.208-7.357 17.749l-88.576 88.747c-4.541 4.546-10.817 7.358-17.749 7.358s-13.208-2.812-17.749-7.357l-106.496-106.326zM480.939 541.184l-469.845-470.016c-6.839-6.802-11.072-16.219-11.072-26.624s4.233-19.822 11.070-26.622l70.828-70.828c6.821-6.798 16.232-11.001 26.624-11.001s19.803 4.203 26.625 11.002l470.015 469.844zM250.709 815.616l14.848-40.277c14.495-38.364 44.239-68.107 81.64-82.283l41.24-15.168-40.277-14.848c-38.364-14.495-68.107-44.239-82.283-81.64l-15.168-41.24-14.848 40.277c-14.423 38.302-44.036 68.028-81.302 82.28l-41.237 15.17 40.277 14.848c38.364 14.495 68.107 44.239 82.283 81.64zM551.765 960l10.24-27.477c9.877-26.259 30.232-46.613 55.834-56.273l28.134-10.457-27.477-10.24c-26.246-9.897-46.593-30.245-56.272-55.833l-10.458-27.452-10.24 27.477c-9.897 26.246-30.245 46.593-55.833 56.272l-28.135 10.458 27.477 10.24c26.259 9.877 46.613 30.232 56.273 55.834zM796.331 311.467l7.851-20.992c7.584-20.049 23.129-35.594 42.675-43.011l21.666-8.018-21.163-7.851c-20.049-7.584-35.594-23.129-43.011-42.675l-8.018-21.495-7.851 20.992c-7.584 20.049-23.129 35.594-42.675 43.011l-21.666 8.018 21.163 7.851c20.049 7.584 35.594 23.129 43.011 42.675z" />
67
+ <glyph unicode="&#x5b;" glyph-name="fi-tablet-landscape" d="M1024 644.096c0 20.171-16.352 36.523-36.523 36.523h-950.955c-20.171 0-36.523-16.352-36.523-36.523s0-1.024 0-1.536v0-672.427c1.203-19.099 16.988-34.133 36.284-34.133 0.024 0 0.048 0 0.071 0h951.122c0.071 0 0.155-0.001 0.238-0.001 19.296 0 35.081 15.035 36.279 34.029l0.005 0.105v672.427s0 1.024 0 1.536zM904.533 55.467h-785.067v505.344h785.067v-505.344zM964.437 277.333c-16.495 0-29.867 13.372-29.867 29.867s13.372 29.867 29.867 29.867c16.495 0 29.867-13.372 29.867-29.867 0-0.001 0-0.001 0-0.002 0-16.495-13.372-29.867-29.867-29.867-0.12 0-0.24 0.001-0.36 0.002z" />
68
+ <glyph unicode="&#x5c;" glyph-name="fi-monitor" d="M961.195 760.491h-898.389c-34.686 0-62.805-28.119-62.805-62.805v-548.011c0-34.686 28.119-62.805 62.805-62.805h338.261v-95.232h-104.789c-9.897 0-17.92-8.023-17.92-17.92v-19.456c-0.002-0.102-0.003-0.221-0.003-0.341 0-9.897 8.023-17.92 17.92-17.92 0.001 0 0.002 0 0.003 0h422.229c9.897 0 17.92 8.023 17.92 17.92v19.627c0 9.897-8.023 17.92-17.92 17.92h-95.573v95.232h338.261c0 0 0 0 0 0 34.686 0 62.805 28.119 62.805 62.805 0 0.060 0 0.12 0 0.18v548.001c0 34.686-28.119 62.805-62.805 62.805zM111.957 649.557h800.085v-451.755h-800.085z" />
69
+ <glyph unicode="&#x5d;" glyph-name="fi-tablet-portrait" horiz-adv-x="745" d="M708.096 960h-673.963c-19.099-1.203-34.134-16.988-34.134-36.284 0-0.084 0-0.168 0.001-0.251v-950.942c0-0.071-0.001-0.155-0.001-0.238 0-19.296 15.035-35.081 34.029-36.279l674.068-0.005c20.171 0 36.523 16.352 36.523 36.523v950.955c0 20.171-16.352 36.523-36.523 36.523zM370.859-33.963c-16.495 0-29.867 13.372-29.867 29.867s13.372 29.867 29.867 29.867c16.495 0 29.867-13.372 29.867-29.867s-13.372-29.867-29.867-29.867zM624.811 55.467h-505.344v785.067h505.173v-785.067z" />
70
+ <glyph unicode="&#x5e;" glyph-name="fi-align-center" horiz-adv-x="1018" d="M50.005-64h917.333c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005h-917.333c0 0 0 0 0 0-27.557 0-49.908-22.291-50.005-49.825v-46.089c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0zM123.563 324.779v0-46.080c0-27.617 22.388-50.005 50.005-50.005h670.208c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005h-670.208c-27.617 0-50.005-22.388-50.005-50.005zM100.352 813.739h816.981c27.617 0 50.005 22.388 50.005 50.005v46.251c0 27.617-22.388 50.005-50.005 50.005h-816.981c-0.051 0-0.111 0-0.171 0-27.617 0-50.005-22.388-50.005-50.005 0 0 0 0 0 0v0-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0.060 0 0.12 0 0.18 0zM173.568 571.221c0-27.617 22.388-50.005 50.005-50.005h570.197c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005h-570.027c-27.617 0-50.005-22.388-50.005-50.005v0-46.080z" />
71
+ <glyph unicode="&#x5f;" glyph-name="fi-check-tick" d="M873.984 809.984c-92.651 92.636-220.639 149.931-362.008 149.931-282.77 0-512-229.23-512-512s229.23-512 512-512c141.37 0 269.358 57.295 362.009 149.932 92.671 92.656 149.991 220.668 149.991 362.068s-57.32 269.412-149.991 362.068zM724.651 535.040l-251.392-251.392c-10.683-10.67-25.435-17.268-41.728-17.268s-31.045 6.599-41.729 17.269l-126.805 126.805c-6.868 6.884-11.116 16.386-11.116 26.88s4.247 19.996 11.116 26.881l29.695 29.695c6.893 6.919 16.429 11.201 26.965 11.201s20.073-4.282 26.964-11.2l85.335-85.335 209.067 210.091c6.884 6.868 16.386 11.116 26.88 11.116s19.996-4.247 26.881-11.116l29.695-29.695c6.868-6.884 11.116-16.386 11.116-26.88s-4.247-19.996-11.116-26.881z" />
72
+ <glyph unicode="&#x60;" glyph-name="fi-list" d="M0 759.296v0c0 0 0-0.001 0-0.002 0-19.674 15.852-35.645 35.48-35.838h952.85c19.72 0.097 35.669 16.106 35.669 35.84 0 0 0 0 0 0v0 165.035c-0.096 19.661-16.009 35.573-35.66 35.669h-952.5c-19.794 0-35.84-16.046-35.84-35.84s0-1.195 0-1.877zM988.16 566.272h-952.32c-19.794 0-35.84-16.046-35.84-35.84s0-1.195 0-1.877v-163.157c0 0 0-0.001 0-0.002 0-19.674 15.852-35.645 35.48-35.838h952.85c19.721 0.097 35.67 16.106 35.67 35.84 0 0.060 0 0.12 0 0.18v-0.009 165.035c-0.097 19.72-16.106 35.669-35.84 35.669 0 0 0 0 0 0zM988.16 172.544h-952.32c-19.794 0-35.84-16.046-35.84-35.84s0-1.195 0-1.877v-162.987c0-19.794 16.046-35.84 35.84-35.84h952.491c19.72 0.097 35.669 16.106 35.669 35.84 0 0 0 0 0 0v0 165.035c-0.097 19.72-16.106 35.669-35.84 35.669 0 0 0 0 0 0z" />
73
+ <glyph unicode="&#x61;" glyph-name="fi-social-apple" horiz-adv-x="880" d="M850.261 616.448c-52.736 65.707-126.805 104.619-196.779 104.619-92.501 0-131.584-43.861-195.755-43.861s-116.395 43.008-196.437 43.008-162.133-47.787-215.040-129.365c-74.581-114.688-61.952-330.581 59.051-514.389 43.179-65.707 100.864-140.459 176.299-140.459 67.072 0 85.333 42.837 177.152 43.349s108.203-43.349 175.275-43.349c75.435 0 136.533 82.603 179.541 148.309 24.143 35.8 46.435 76.814 64.74 119.931-172.942 70.874-201.102 317.658-28.046 412.549zM583.339 793.771c31.801 38.422 51.094 88.207 51.094 142.498 0 8.36-0.457 16.612-1.349 24.734-63.001-8.682-117.708-39.6-156.125-84.796-34.42-41.647-62.409-102.746-51.487-162.479 64.235 1.484 120.975 32.321 157.516 79.57z" />
74
+ <glyph unicode="&#x62;" glyph-name="fi-archive" d="M1002.667 675.499h-981.333v-698.197c0-22.81 18.491-41.301 41.301-41.301h898.731c22.81 0 41.301 18.491 41.301 41.301zM712.533 397.995h-400.555v104.107h400.043zM50.005 918.016c-27.526-0.66-49.634-22.947-50.005-50.482v-119.502h1024v119.467c0 0.004 0 0.009 0 0.014 0 27.857-22.247 50.518-49.943 51.185z" />
75
+ <glyph unicode="&#x63;" glyph-name="fi-credit-card" d="M0-14.336c0-27.429 22.235-49.664 49.664-49.664h924.672c27.429 0 49.664 22.235 49.664 49.664v392.533h-1024zM974.336 669.867h-924.672c0 0-0.001 0-0.001 0-27.429 0-49.664-22.235-49.664-49.664 0-0.12 0-0.24 0.001-0.36v-102.382h1024v102.4c0.001 0.101 0.001 0.221 0.001 0.341 0 27.429-22.235 49.664-49.664 49.664 0 0-0.001 0-0.001 0z" />
76
+ <glyph unicode="&#x64;" glyph-name="fi-social-dropbox" d="M301.227 888.491l-301.227-196.779 208.213-166.741 303.787 187.563-210.773 175.957zM0 358.229v0l301.227-196.779 210.773 175.957-303.787 187.563-208.213-166.741zM512 337.408l210.773-175.957 301.227 196.779-208.213 166.741-303.787-187.563zM722.773 888.491l-210.773-175.957 303.787-187.563 208.213 166.741-301.227 196.779zM301.227 124.245l-90.453 59.051v-66.219l301.909-181.077 301.739 181.077v66.219l-90.453-59.051-211.285 175.275-211.456-175.275z" />
77
+ <glyph unicode="&#x65;" glyph-name="fi-eye" d="M512 223.915c123.759 0 224.085 100.326 224.085 224.085s-100.326 224.085-224.085 224.085c-123.759 0-224.085-100.326-224.085-224.085s100.326-224.085 224.085-224.085zM0 448s136.533 352.085 512 352.085 512-352.085 512-352.085-136.533-352.085-512-352.085-512 352.085-512 352.085zM512 352.085c52.972 0 95.915 42.942 95.915 95.915s-42.942 95.915-95.915 95.915c-52.972 0-95.915-42.942-95.915-95.915s42.942-95.915 95.915-95.915z" />
78
+ <glyph unicode="&#x66;" glyph-name="fi-social-facebook" horiz-adv-x="495" d="M109.739-64v512h-109.739v176.469h109.739v105.984c0 144.213 62.123 229.547 238.080 229.547h147.115v-176.469h-91.989c-68.267 0-73.216-24.747-73.216-70.656v-88.235h165.205l-18.773-176.64h-146.603v-512z" />
79
+ <glyph unicode="&#x67;" glyph-name="fi-social-google-plus" horiz-adv-x="1505" d="M1.195 471.893c-15.701-201.216 116.736-399.36 303.445-469.675s424.789-22.869 543.744 144.384c78.507 105.643 95.403 241.664 86.187 369.323-152.405 0.341-304.469 0.341-456.704 0.341 0-54.272 0-108.544 0-162.987 90.965-2.901 182.272-1.536 273.067-2.901-40.107-201.899-314.88-267.435-460.8-135.509-148.309 115.883-141.312 369.664 14.165 477.013 108.544 86.699 262.997 65.195 371.712-9.728 42.469 39.734 82.033 80.649 119.479 123.463-88.759 73.999-199.693 125.369-317.623 120.249-246.101 7.851-472.405-207.872-476.672-453.973zM1231.531 652.8c0-45.397-0.853-90.795-1.195-136.533l-136.533-0.853v-136.533l136.533-1.365c0-45.397 0-90.795 0.853-136.533h136.533c0 45.397 0 90.795 0.853 136.533l136.533 1.195v137.557l-136.533 0.853c0 45.397 0 90.965-0.853 136.533z" />
80
+ <glyph unicode="&#x68;" glyph-name="fi-social-github" d="M512 934.741c-0.11 0-0.241 0-0.371 0-282.77 0-512-229.23-512-512 0-225.030 145.173-416.153 346.974-484.823 29.205-5.844 37.739 10.028 37.739 23.51s0 44.373 0 87.040c-142.507-30.891-172.544 68.267-172.544 68.267-23.211 59.733-56.661 75.264-56.661 75.264-46.421 31.744 3.584 31.061 3.584 31.061 33.642-4.794 61.856-24.567 78.061-52.229 46.013-78.673 119.741-56.145 149.267-43.003 2.518 26.917 14.443 50.654 32.408 68.248-113.645 12.989-233.112 57.192-233.112 253.458-0.013 0.842-0.020 1.835-0.020 2.83 0 52.018 20.062 99.35 52.871 134.681-6.822 18.19-10.702 39.335-10.702 61.387 0 26.775 5.72 52.215 16.004 75.163s42.541 12.658 140.333-53.731c38.377 10.941 82.454 17.232 128 17.232s89.623-6.291 131.409-18.052c94.383 67.038 137.221 53.385 137.221 53.385 9.885-21.837 15.644-47.349 15.644-74.205 0-21.975-3.856-43.050-10.929-62.584 32.998-33.856 52.995-81.074 52.995-132.964 0-1.105-0.009-2.208-0.027-3.309 0.002-196.442-119.465-239.791-233.811-252.421 18.432-15.872 34.133-47.104 34.133-94.891 0-68.267 0-123.563 0-140.459 0-13.653 9.216-29.696 35.157-24.576 205.138 69.887 350.066 260.877 350.066 485.717 0 282.66-229.052 511.822-511.67 512z" />
81
+ <glyph unicode="&#x69;" glyph-name="fi-social-linkedin" d="M229.205-64h-212.139v684.032h212.139zM123.051 713.557c-0.051 0-0.111 0-0.171 0-68.053 0-123.221 55.168-123.221 123.221s55.168 123.221 123.221 123.221c68.053 0 123.221-55.168 123.221-123.221 0-0.051 0-0.111 0-0.171 0-67.959-55.092-123.051-123.051-123.051zM1024-64h-211.968v332.629c0 79.36-1.536 181.419-110.251 181.419s-127.317-86.357-127.317-175.616v-338.432h-212.139v684.032h203.605v-93.525h2.901c28.501 53.76 96.768 110.592 200.704 110.592 214.869 0 254.464-141.653 254.464-325.632v-375.467z" />
82
+ <glyph unicode="&#x6a;" glyph-name="fi-like" d="M0 43.349c-0.058 0.817-0.091 1.77-0.091 2.731s0.033 1.914 0.098 2.858l-0.007 424.15c0 22.056 17.88 39.936 39.936 39.936h78.336c21.424-0.661 38.562-18.097 38.741-39.577v-433.51c-2.112-19.854-18.565-35.244-38.699-35.669l-0.042-0.001h-78.336c-0.003 0-0.006 0-0.009 0-21.756 0-39.449 17.397-39.926 39.038zM236.373-23.211v575.147c0 22.056 17.88 39.936 39.936 39.936h158.72c2.507 3.71 5.381 6.909 8.636 9.672l155.716 269.709c15.697 27.709 44.937 46.131 78.49 46.251 49.908-0.578 90.13-41.157 90.13-91.13 0-0.182-0.001-0.364-0.002-0.546l0.853 0.028v-233.984h216.235c21.611-0.572 38.912-18.227 38.912-39.923 0-0.005 0-0.009 0-0.014v0.001-443.733c-0.022-5.463-2.235-10.404-5.804-13.996l-153.599-153.599c-3.34-2.78-7.675-4.467-12.404-4.467-0.983 0-1.948 0.073-2.892 0.213l-572.992-0.013c-0.013 0-0.029 0-0.044 0-21.301 0-38.691 16.749-39.717 37.796l-0.004 0.092v1.195s0 0 0 0 0 0 0 0zM977.067 106.837v0 0z" />
83
+ <glyph unicode="&#x6b;" glyph-name="fi-dislike" d="M1024 744.277v0c-0.022 5.463-2.235 10.404-5.804 13.996l-153.599 153.599c-3.36 2.775-7.711 4.458-12.455 4.458-0.965 0-1.913-0.070-2.84-0.204l-571.969 0.013c-0.013 0-0.029 0-0.044 0-21.301 0-38.691-16.749-39.717-37.796l-0.004-0.092v-1.365s0 0 0 0 0 0 0 0v-575.659c-0.008-0.305-0.013-0.664-0.013-1.024 0-22.001 17.79-39.846 39.77-39.936h158.387c2.395-3.843 5.163-7.153 8.325-10.036l1.744-2.935v-1.707h1.024l153.6-264.704c15.852-27.026 44.761-44.886 77.842-44.886 0.114 0 0.227 0 0.34 0.001 49.928 0.385 90.268 40.963 90.268 90.963 0 0.241-0.001 0.482-0.003 0.722l0.854-0.037v233.643h215.381c21.611 0.572 38.912 18.227 38.912 39.923 0 0.005 0 0.009 0 0.014v-0.001 443.733zM156.501 806.4v0c-0.289 21.835-18.057 39.424-39.933 39.424-0.001 0-0.002 0-0.003 0h-77.653c-21.476-0.475-38.726-17.904-38.912-39.406v-433.341c1.956-20.057 18.558-35.654 38.876-36.010h78.201c0 0 0.001 0 0.001 0 21.936 0 39.741 17.686 39.934 39.576 0.062 0.835 0.097 1.788 0.097 2.749s-0.035 1.914-0.104 2.857z" />
84
+ <glyph unicode="&#x6c;" glyph-name="fi-location-marker" horiz-adv-x="768" d="M384.037 960c212.124-0.388 383.963-172.467 383.963-384.682 0-0.18 0-0.36 0-0.513 0-268.288-384-638.805-384-638.805s-384 370.517-384 638.778c0 0.18 0 0.36 0 0.54 0 212.215 171.84 384.294 384 384.682zM384 767.317c-0.152 0-0.332 0.001-0.512 0.001-106.416 0-192.683-86.267-192.683-192.683s86.267-192.683 192.683-192.683c106.416 0 192.683 86.267 192.683 192.683 0 0.060 0 0.12 0 0.179 0 0.041 0 0.101 0 0.161 0 106.167-86.017 192.244-192.161 192.341z" />
85
+ <glyph unicode="&#x6d;" glyph-name="fi-mail" d="M896 960h-768c-70.614-0.194-127.806-57.386-128-127.981v-76.819c186.027-100.011 418.304-230.912 431.957-238.933 21.96-10.812 47.803-17.137 75.122-17.137 1.73 0 3.454 0.025 5.172 0.076 1.203-0.050 2.914-0.075 4.632-0.075 27.332 0 53.187 6.324 76.181 17.588 12.631 6.886 244.908 137.788 430.935 238.481v76.8c-0.194 70.614-57.386 127.806-127.981 128zM592.043 362.667c-20.366-10.95-44.565-17.384-70.266-17.384-3.44 0-6.853 0.115-10.235 0.342-2.466-0.227-5.878-0.342-9.318-0.342-25.701 0-49.9 6.434-71.073 17.779-17.284 9.674-243.417 140.576-431.151 238.538v-537.6c0.193-70.555 57.288-127.71 127.802-128h768.028c0 0 0 0 0 0 70.727 0 128.073 57.287 128.171 127.991v537.609c-187.733-97.963-413.867-228.864-431.957-238.933z" />
86
+ <glyph unicode="&#x6e;" glyph-name="fi-notification" horiz-adv-x="828" d="M804.011 170.155c-56.593 42.156-94.077 107.245-98.612 181.242q-0.034 7.856-0.034 15.195v230.571c0 0.036 0 0.078 0 0.121 0 77.372-30.286 147.671-79.651 199.687l0.12-0.128c-4.779 4.949-9.728 9.728-14.677 14.507l-2.048 1.877c-4.608 4.267-9.557 8.363-14.507 12.288l-3.755 2.901q-6.827 5.291-14.165 10.069l-5.632 3.755c-4.437 2.901-8.875 5.632-13.483 8.192l-7.68 4.096-12.629 6.485-10.24 4.437-11.264 4.608c-4.437 1.707-9.045 3.072-13.653 4.608l-8.875 2.901c-7.68 2.219-15.701 4.096-23.723 5.632v21.504c0 30.586-24.795 55.381-55.381 55.381s-55.381-24.795-55.381-55.381v-21.675c-8.021-1.536-15.872-3.413-23.552-5.632l-9.387-2.731c-4.608-1.536-9.216-2.901-13.653-4.608l-11.264-4.608-10.24-4.437-12.629-6.485-7.68-4.096c-4.608-2.56-9.045-5.461-13.483-8.192l-5.632-3.755c-4.779-3.243-9.557-6.656-14.165-10.069l-3.755-2.901c-4.949-3.925-9.728-8.021-14.507-12.288l-1.877-1.877c-5.12-4.608-10.069-9.387-14.677-14.507v0c-49.244-51.889-79.531-122.187-79.531-199.559 0-0.043 0-0.085 0-0.128v-230.564c0-4.779 0-9.728 0-14.507-4.698-74.762-42.366-139.862-98.498-181.464l-24.212-17.875v-122.539h292.523c14.321-54.478 63.131-94.007 121.173-94.007s106.853 39.529 120.978 93.135l292.889 0.872v122.539z" />
87
+ <glyph unicode="&#x6f;" glyph-name="fi-pause" horiz-adv-x="758" d="M217.941 960h-181.077c-20.359 0-36.864-16.505-36.864-36.864v0-950.101c0-0.051 0-0.111 0-0.171 0-20.359 16.505-36.864 36.864-36.864 0 0 0 0 0 0h180.907c20.359 0 36.864 16.505 36.864 36.864v0 950.101c0 0.051 0 0.111 0 0.171 0 20.3-16.408 36.767-36.684 36.864zM758.443-26.965v950.101c0 0 0 0 0 0 0 20.299-16.407 36.767-36.684 36.864h-181.087c-20.359 0-36.864-16.505-36.864-36.864v0-950.101c0-0.051 0-0.111 0-0.171 0-20.359 16.505-36.864 36.864-36.864 0 0 0 0 0 0h180.907c20.359 0 36.864 16.505 36.864 36.864v0z" />
88
+ <glyph unicode="&#x70;" glyph-name="fi-play" horiz-adv-x="897" d="M896.853 448c-0.066 13.948-7.832 26.066-19.263 32.33l-819.051 473.014c-5.945 4.206-13.345 6.724-21.333 6.724-20.548 0-37.205-16.657-37.205-37.205 0-0.024 0-0.048 0-0.071-0.043-0.634-0.067-1.379-0.067-2.13s0.024-1.495 0.072-2.234l-0.005 0.101v-949.419c2.132-18.71 17.874-33.111 36.979-33.111 0.139 0 0.279 0.001 0.418 0.002 6.844 0.018 13.262 1.918 18.748 5.212l-0.166-0.092 822.443 474.112c11.104 6.533 18.439 18.424 18.439 32.028 0 0.26-0.003 0.52-0.008 0.779z" />
89
+ <glyph unicode="&#x71;" glyph-name="fi-eye-hide" d="M201.216 838.997c-2.596 2.605-6.187 4.217-10.155 4.217s-7.559-1.612-10.154-4.216l-61.44-60.928c-2.605-2.596-4.217-6.187-4.217-10.155s1.612-7.559 4.216-10.154l701.27-700.758c2.596-2.605 6.187-4.217 10.155-4.217s7.559 1.612 10.154 4.216l60.928 60.928c2.605 2.596 4.217 6.187 4.217 10.155s-1.612 7.559-4.216 10.154zM665.6 456.533c-4.372 78.297-66.77 140.695-144.666 145.049zM358.4 437.419c5.285-76.768 66.251-137.734 142.541-142.992zM512 671.915c0.243 0.001 0.531 0.002 0.818 0.002 123.288 0 223.232-99.944 223.232-223.232 0-19.895-2.603-39.181-7.486-57.539l150.881-148.97c60.159 57.039 108.919 125.422 142.957 201.809s-134.935 356.101-510.402 356.101c-0.695 0.003-1.517 0.005-2.339 0.005-58.177 0-114.196-9.241-166.669-26.335l113.712-108.838c16.592 4.431 35.643 6.983 55.287 6.997zM512 223.915c-0.228-0.001-0.498-0.001-0.768-0.001-123.288 0-223.232 99.944-223.232 223.232 0 19.337 2.459 38.1 7.081 55.993l-151.38 149.661c-59.739-56.808-108.2-124.836-142.102-200.79s134.934-355.925 510.401-355.925c0.727-0.004 1.587-0.006 2.447-0.006 57.572 0 113.029 9.053 165.026 25.812l-113.884 109.020c-16.056-4.238-34.509-6.722-53.525-6.826z" />
90
+ <glyph unicode="&#x72;" glyph-name="fi-reply" d="M1018.197 2.048c-94.208 337.749-356.693 426.667-516.779 448.683l-84.309 11.605v-223.573l-417.109 327.509 417.109 327.339v-175.957l62.293-10.069c203.264-33.28 352.939-115.2 442.197-243.883 82.773-119.467 115.712-279.723 96.256-461.653z" />
91
+ <glyph unicode="&#x73;" glyph-name="fi-share" horiz-adv-x="871" d="M724.309 594.261c-18.787-0.030-36.732-3.598-53.217-10.072l-378.911 219.821c0 3.243 0 6.485 0 9.728-0.286 80.75-65.812 146.1-146.602 146.1-80.966 0-146.603-65.636-146.603-146.603s65.636-146.603 146.603-146.603c32.171 0 61.921 10.362 86.096 27.931l352.858-203.215c-4.21-13.064-6.637-28.094-6.637-43.691s2.427-30.627 6.924-44.733l-352.543-202.393c-23.762 17.425-53.583 27.883-85.845 27.883-80.684 0-146.091-65.407-146.091-146.091s65.407-146.091 146.091-146.091c80.684 0 146.091 65.407 146.091 146.091 0 0.037 0 0.075 0 0.112 0 3.066 0 5.968 0 8.869l380.416 220.16c15.309-5.943 33.028-9.386 51.552-9.386 80.778 0 146.261 65.483 146.261 146.261s-65.483 146.261-146.261 146.261c-0.124 0-0.247 0-0.371 0z" />
92
+ <glyph unicode="&#x74;" glyph-name="fi-social-twitter" horiz-adv-x="1218" d="M1218.048 825.685c-41.589-18.946-89.834-32.762-140.423-39.009 49.255 31.051 88.111 79.092 106.978 136.225-45.177-25.853-98.349-46.93-154.997-58.44-49.015 48.489-114.054 79.052-186.231 79.052-138.18 0-250.197-112.017-250.197-250.197 0-20.429 2.448-40.285 7.068-59.293-208.387 12.694-391.297 111.711-513.9 261.895-22.372-34.799-34.994-78.235-34.994-124.62 0-86.188 43.58-162.198 109.907-207.195-40.859 0.781-79.652 12.196-113.518 31.316 1.242-1.669 1.242-2.693 1.242-3.717 0.053-120.496 85.278-221.072 198.736-244.793-18.020-5.811-40.581-8.989-63.884-8.989-0.129 0-0.258 0-0.387 0-0.039 0-0.109 0-0.179 0-16.53 0-32.683 1.615-48.31 4.696 34.425-100.367 126.132-171.764 234.807-173.823-84.086-66.609-191.923-106.842-309.157-106.842-0.367 0-0.735 0-1.102 0.001-20.933 0.002-41.631 1.242-61.971 3.651 110.58-70.657 242.885-112.537 384.972-112.537 0.225 0 0.45 0 0.675 0 459.571 0 710.793 380.757 710.793 710.997 0 10.752 0 21.675 0 32.256 49.075 35.761 90.418 78.625 123.442 127.566z" />
93
+ <glyph unicode="&#x75;" glyph-name="fi-white-label-video" horiz-adv-x="1114" d="M1102.848 672.427s-10.581 77.312-44.715 111.445c-28.423 29.011-67.857 47.141-111.527 47.615-155.908 11.265-389.721 11.265-389.721 11.265v0s-89.259 0-194.219-2.731l-1.707-1.707v-388.779c0-6.786-5.502-12.288-12.288-12.288-3.509 0.016-6.664 1.522-8.867 3.917l-88.243 88.243c-1.923 2.313-4.802 3.774-8.021 3.774s-6.098-1.462-8.008-3.757l-0.014-0.017-89.6-88.747c-2.162-2.096-5.109-3.395-8.359-3.413-6.79 0-12.292 5.502-12.292 12.288v375.637c-27.755-7.101-51.477-21.577-69.721-41.213-34.215-34.222-44.284-111.534-44.284-111.534-6.606-53.897-10.682-116.924-11.258-180.786l-0.006-86.137c0.52-64.592 4.535-127.632 11.87-189.654s10.146-69.247 43.426-103.38c42.325-44.715 97.963-43.349 122.88-47.957 89.088-8.533 378.709-11.264 378.709-11.264s234.155 0 389.973 11.776c43.612 0.524 82.907 18.575 111.252 47.422 34.156 34.156 44.396 111.468 44.396 111.468 6.56 54.011 10.575 117.11 11.089 181.045l0.005 86.049c-0.518 64.65-4.534 127.749-11.87 189.832zM440.661 292.352v316.245l295.936-154.965z" />
94
+ <glyph unicode="&#x76;" glyph-name="fi-social-drive" d="M383.488 245.419l-177.664-305.323h640.512l177.664 305.323h-640.512zM329.216 818.688l320.341-554.667 353.28-1.024-320.171 554.667-353.451 1.024zM0 242.517l175.787-306.517 320.171 554.667-175.616 306.517-320.341-554.667z" />
95
+ <glyph unicode="&#x77;" glyph-name="fi-wordpress" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM255.147 644.608c25.259 1.365 47.957 4.096 47.957 4.096 8.85 0.729 15.756 8.091 15.756 17.067 0 9.456-7.665 17.121-17.121 17.121-0.481 0-0.956-0.020-1.427-0.059s-68.205-5.287-111.725-5.287c-7.851 0-17.067 0-26.965 0 76.052 114.526 204.485 188.994 350.311 188.994 109.329 0 208.881-41.857 283.507-110.42l-5.764 0.274c-39.179-1.128-70.51-33.157-70.51-72.505 0-0.67 0.009-1.338 0.027-2.004-0.002-34.035 19.966-63.731 41.129-98.206 21.048-32.798 33.711-72.734 34.132-115.6 0.001-35.952-13.823-77.595-31.914-135.622l-41.813-139.776-150.869 451.925c25.259 1.365 47.957 4.096 47.957 4.096 8.85 0.729 15.756 8.091 15.756 17.067 0 9.456-7.665 17.121-17.121 17.121-0.481 0-0.956-0.020-1.427-0.059s-68.205-5.287-111.725-5.287c-41.131 0-110.421 5.291-110.421 5.291-0.409 0.035-0.885 0.055-1.365 0.055-9.456 0-17.121-7.665-17.121-17.121 0-8.975 6.906-16.337 15.694-17.063s21.395-2.564 44.094-4.1l65.365-179.541-91.819-274.603zM329.045 70.656c-141.030 69.533-236.344 212.284-236.344 377.297 0 61.818 13.377 120.511 37.393 173.343zM519.339 411.989l129.195-353.792c0.957-2.241 1.985-4.148 3.161-5.948-41.53-14.922-89.365-23.635-139.236-23.635-42.262 0-83.063 6.257-121.527 17.896zM722.773 85.675l128 370.347c19.469 44.241 31.134 95.751 31.911 149.895 0.003 0.411 0.004 0.553 0.004 0.694 0 15.086-1.055 29.926-3.094 44.45 32.457-59.671 51.452-128.883 51.452-202.531 0-153.868-82.908-288.372-206.488-361.276z" />
96
+ <glyph unicode="&#x78;" glyph-name="fi-widget-settings-config" d="M999.424 530.944l-129.877 12.8c-9.193 33.918-21.85 63.586-37.968 90.973l83.877 99.32c3.807 4.657 6.114 10.669 6.114 17.22 0 7.537-3.054 14.362-7.992 19.303l-79.019 79.019c-4.941 4.938-11.765 7.992-19.302 7.992-6.551 0-12.564-2.307-17.269-6.153l-100.986-82.905c-25.672 15.185-55.341 27.841-86.69 36.434l-15.369 130.478c-1.433 13.848-13.031 24.558-27.134 24.576h-111.618c-14.105-0.018-25.703-10.728-27.126-24.459l-12.81-130.165c-33.915-9.179-63.585-21.837-90.966-37.965l-99.327 83.874c-4.657 3.807-10.669 6.114-17.22 6.114-7.537 0-14.362-3.054-19.303-7.992l-78.848-78.848c-4.938-4.941-7.992-11.765-7.992-19.302 0-6.551 2.307-12.564 6.153-17.269l82.905-100.986c-15.194-25.673-27.851-55.343-36.436-86.695l-130.646-15.363c-13.848-1.433-24.558-13.031-24.576-27.134v-111.618c0.018-14.105 10.728-25.703 24.459-27.126l130.165-12.81c9.175-33.915 21.832-63.585 37.964-90.964l-83.873-99.329c-3.889-4.663-6.251-10.718-6.251-17.325 0-7.498 3.041-14.286 7.957-19.197l78.848-78.848c4.941-4.938 11.765-7.992 19.302-7.992 6.551 0 12.564 2.307 17.269 6.153l100.986 82.905c25.671-15.228 55.334-27.938 86.678-36.597l15.38-130.485c1.434-13.86 13.050-24.576 27.17-24.576 0.048 0 0.096 0 0.144 0h111.609c14.105 0.018 25.703 10.728 27.126 24.459l12.81 129.994c33.919 9.237 63.585 21.949 90.955 38.133l99.338-83.872c4.657-3.807 10.669-6.114 17.22-6.114 7.537 0 14.362 3.054 19.303 7.992l78.848 78.848c4.916 4.912 7.957 11.699 7.957 19.197 0 6.607-2.361 12.663-6.286 17.369l-82.909 100.991c15.183 25.672 27.839 55.341 36.434 86.688l130.478 15.37c13.995 1.266 24.882 12.924 24.917 27.132v111.62c-0.018 14.105-10.728 25.703-24.459 27.126zM512 296.96c-83.417 0-151.040 67.623-151.040 151.040s67.623 151.040 151.040 151.040c83.417 0 151.040-67.623 151.040-151.040s-67.623-151.040-151.040-151.040z" />
97
+ <glyph unicode="&#x79;" glyph-name="fi-social-youtube" horiz-adv-x="1114" d="M1102.848 672.427s-10.581 77.312-44.715 111.445c-28.423 29.011-67.857 47.141-111.527 47.615-155.908 11.265-389.721 11.265-389.721 11.265v0s-233.813 0-389.803-11.264c-43.755-0.495-83.183-18.62-111.591-47.59-34.159-34.159-44.228-111.471-44.228-111.471-6.601-53.889-10.677-116.916-11.258-180.777l-0.006-86.146c0.524-64.599 4.54-127.638 11.87-189.662s10.146-69.239 43.426-103.372c42.325-44.715 97.963-43.349 122.88-47.957 89.088-8.533 378.709-11.264 378.709-11.264s233.984 0 389.973 11.776c43.612 0.524 82.907 18.575 111.252 47.422 34.156 34.156 44.396 111.468 44.396 111.468 6.56 54.009 10.576 117.109 11.089 181.043l0.005 86.051c-0.518 64.65-4.534 127.749-11.87 189.832zM440.661 292.352v316.245l295.936-154.965z" />
98
+ <glyph unicode="&#x7a;" glyph-name="fi-filter" d="M1024 728.576c-0.063 44.774-35.52 81.246-79.888 82.939l-860.997 0.005c-0.072 0-0.157 0-0.243 0-45.903 0-83.115-37.212-83.115-83.115 0-26.158 12.084-49.494 30.974-64.73l386.036-386.343v-238.933c0.665-15.332 9.197-28.533 21.637-35.729l0.209-0.111 103.424-59.733c6.303-3.758 13.9-5.98 22.016-5.98 24.035 0 43.52 19.485 43.52 43.52 0 0.062 0 0.124 0 0.187 0 1.185 0 2.209 0 3.404v0 293.376l389.803 389.632c16.397 15.17 26.628 36.8 26.628 60.82 0 0.278-0.001 0.555-0.004 0.833zM284.843 645.291v0z" />
99
+ <glyph unicode="&#x7b;" glyph-name="fi-italic" horiz-adv-x="382" d="M382.464 912.896c0 26.015-21.089 47.104-47.104 47.104h-83.115c-0.17 0.002-0.371 0.003-0.573 0.003-25.081 0-45.568-19.674-46.868-44.432l-0.005-0.116-204.8-921.6v-2.048c-0.118-1.228-0.185-2.654-0.185-4.096s0.067-2.868 0.199-4.276c-0.018-0.060-0.021-0.343-0.021-0.626 0-24.722 19.114-44.979 43.37-46.8l0.157-0.009h86.699c24.249 0.061 44.173 18.503 46.576 42.127l0.016 0.199 203.605 921.6c1.141 3.771 1.823 8.11 1.877 12.6z" />
100
+ <glyph unicode="&#x7c;" glyph-name="fi-flag" horiz-adv-x="976" d="M955.733 798.208c-0.041 0-0.090 0-0.138 0-2.841 0-5.551-0.565-8.023-1.588l0.139 0.051c-43.859-23.422-95.925-37.187-151.205-37.205-0.183 0-0.392-0.001-0.601-0.001-100.738 0-190.848 45.506-250.895 117.083-54.643 51.823-128.037 83.375-208.8 83.375-77.746 0-148.664-29.239-202.356-77.32-11.133 24.557-35.409 41.082-63.544 41.082-38.834 0-70.315-31.481-70.315-70.315 0-0.253 0.001-0.507 0.004-0.759v-846.127c0-38.928 31.557-70.485 70.485-70.485s70.485 31.557 70.485 70.485v381.099c42.989 22.156 93.818 35.145 147.68 35.145 100.884 0 191.125-45.566 251.266-117.241 54.587-51.676 127.857-83.13 208.473-83.13 87.143 0 165.702 36.754 221.020 95.606 4.335 3.97 6.957 9.436 6.974 15.516v443.736c0 0.001 0 0.002 0 0.003 0 11.474-9.205 20.797-20.633 20.989z" />
101
+ <glyph unicode="&#x7d;" glyph-name="fi-puzzle" horiz-adv-x="750" d="M749.397 464.043v168.96c0 28.277-22.923 51.2-51.2 51.2v0h-164.693c-36.869 2.304-65.899 32.769-65.899 70.015 0 16.259 5.532 31.226 14.816 43.121l-1.141-0.156c9.014 15.408 14.336 33.925 14.336 53.686 0 59.476-48.215 107.691-107.691 107.691s-107.691-48.215-107.691-107.691c0-19.761 5.322-38.278 14.612-54.197l-1.47 0.511c9.091-11.71 14.573-26.616 14.573-42.803 0-37.202-28.961-67.639-65.567-69.997l-0.206-0.011h-190.976c-28.277 0-51.2-22.923-51.2-51.2s0-1.365 0-2.219v-176.128c0-16.212 13.143-29.355 29.355-29.355 3.057 0.029 5.988 0.526 8.739 1.423 15.082 6.908 32.95 10.968 51.766 10.968 70.692 0 128-57.308 128-128s-57.308-128-128-128c-18.031 0-35.192 3.728-50.753 10.456-2.359 0.983-6.059 1.739-9.935 1.739-16.118 0-29.184-13.066-29.184-29.184 0-0.304 0.005-0.606 0.014-0.907-0.073-0.698-0.114-1.559-0.114-2.431s0.041-1.733 0.121-2.583l-0.008 0.109v-168.96s0-1.536 0-2.219c0.097-28.675 23.365-51.883 52.053-51.883 0 0 0 0 0 0h177.152c0.127-0.002 0.276-0.003 0.426-0.003 16.024 0 29.013 12.99 29.013 29.013 0 3.425-0.594 6.712-1.684 9.763l0.063-0.203s0 1.365 0 2.048v0c-3.357 10.903-5.291 23.435-5.291 36.42 0 70.692 57.308 128 128 128s128-57.308 128-128c0-12.984-1.933-25.517-5.528-37.327l0.237 0.907c-1.422-3.329-2.249-7.202-2.249-11.268 0-16.043 12.869-29.080 28.847-29.35h168.132c28.085 0.471 50.729 23.115 51.199 51.155l0.001 0.045v170.667c-1.842 14.555-14.116 25.707-29.007 25.771l-0.007 1.365c-10.294-2.98-22.119-4.693-34.343-4.693-70.692 0-128 57.308-128 128s57.308 128 128 128c12.225 0 24.049-1.714 35.246-4.914l-0.903 1.415c0.009 0 0.019 0 0.029 0 13.136 0 24.245 8.679 27.906 20.615l1.42 0.207v8.021s0 0 0 0 0 0 0 0z" />
102
+ <glyph unicode="&#x7e;" glyph-name="fi-brush" horiz-adv-x="696" d="M0 366.080c-0.043-1.089-0.067-2.367-0.067-3.651 0-54.575 44.241-98.816 98.816-98.816 1.284 0 2.563 0.024 3.835 0.073l81.737-0.006c0.943 0.054 2.047 0.085 3.157 0.085 32.236 0 58.368-26.132 58.368-58.368 0-1.111-0.031-2.214-0.092-3.31l0.007-219.496c0.097-25.693 20.899-46.495 46.583-46.592h111.455c25.693 0.097 46.495 20.899 46.592 46.583v219.487c-0.061 0.998-0.096 2.164-0.096 3.338 0 32.236 26.132 58.368 58.368 58.368 1.174 0 2.341-0.035 3.498-0.103l81.761 0.008c1.142-0.047 2.482-0.074 3.829-0.074 54.48 0 98.645 44.165 98.645 98.645 0 1.347-0.027 2.687-0.080 4.020l0.006 102.209h-696.32zM257.707 960l-73.387-73.387-73.387 73.387h-110.933v-450.56h696.32v450.56h-438.613z" />
103
+ <glyph unicode="&#xa1;" glyph-name="fi-crown" horiz-adv-x="943" d="M943.445 31.915v0c0 23.281-18.873 42.155-42.155 42.155h-859.136c-23.281 0-42.155-18.873-42.155-42.155v-53.76c0-23.281 18.873-42.155 42.155-42.155h859.136c23.281 0 42.155 18.873 42.155 42.155zM119.467 608.427v0c-7.861 6.851-18.209 11.028-29.532 11.028-24.621 0-44.629-19.748-45.049-44.268l-1.195-0.039v-405.333h1.365c2.163-23.099 21.415-41.047 44.877-41.131h763.4v1.024c23.081 0.117 42.065 17.505 44.694 39.894l0.020 0.212v397.653c0.631 2.813 1.003 6.051 1.024 9.372 0.001 0.093 0.001 0.185 0.001 0.277 0 24.884-20.172 45.056-45.056 45.056-10.85 0-20.804-3.835-28.581-10.223l0.078 0.063-1.195-1.195c-1.535-1.338-2.929-2.732-4.223-4.215l-95.446-95.454-219.477 219.307c-8.246 8.818-19.951 14.314-32.939 14.314s-24.693-5.496-32.915-14.288l-0.024-0.026-221.355-220.331-93.867 93.867c-1.441 1.579-2.945 3.029-4.537 4.379zM790.187 492.032v-1.365h-1.365zM88.235 849.067c46.28 0 83.797-37.517 83.797-83.797s-37.517-83.797-83.797-83.797c-46.28 0-83.797 37.517-83.797 83.797s37.517 83.797 83.797 83.797zM851.115 849.067c0.203 0.002 0.443 0.003 0.683 0.003 46.28 0 83.797-37.517 83.797-83.797s-37.517-83.797-83.797-83.797c-46.279 0-83.796 37.516-83.797 83.794 0 0.001 0 0.002 0 0.003 0 46.040 37.129 83.408 83.078 83.794zM476.501 960c46.207-0.097 83.627-37.577 83.627-83.797 0-46.28-37.517-83.797-83.797-83.797s-83.797 37.517-83.797 83.797c0 0 0 0 0 0 0 46.28 37.517 83.797 83.797 83.797 0.060 0 0.12 0 0.18 0z" />
104
+ <glyph unicode="&#xa2;" glyph-name="fi-upload-cloud" d="M877.056 534.699c-9.452 86.149-81.821 152.577-169.705 152.577-20.539 0-40.23-3.628-58.468-10.278l1.186 0.378c-22.654 94.138-106.132 163.002-205.694 163.002-107.128 0-195.634-79.728-209.42-183.084l-0.118-1.080c-130.046-4.52-233.873-110.554-234.837-241.058l-0.001-0.094c0-134.656 114.688-244.565 249.173-244.565h585.728c0.069 0 0.15 0 0.231 0 102.662 0 186.199 81.884 188.862 183.903l0.005 0.247c-0.079 88.432-62.537 162.253-145.743 179.841l-1.201 0.213zM512 379.733v-136.533c0-5.373-4.355-9.728-9.728-9.728v0h-54.101c-5.373 0-9.728 4.355-9.728 9.728v0 136.533l-131.243-12.459 168.789 296.448 168.789-296.448z" />
105
+ <glyph unicode="&#xa3;" glyph-name="fi-download-cloud" d="M877.056 534.699c-9.452 86.149-81.821 152.577-169.705 152.577-20.539 0-40.23-3.628-58.468-10.278l1.186 0.378c-22.632 94.168-106.125 163.063-205.709 163.063-107.089 0-195.57-79.67-209.405-182.972l-0.119-1.083c-130.105-4.523-233.967-110.652-234.837-241.238v-0.084c-0.853-134.485 114.688-244.565 249.173-244.565h585.557c0.119 0 0.261 0 0.402 0 102.662 0 186.199 81.884 188.862 183.903l0.005 0.247c-0.079 88.432-62.537 162.253-145.743 179.841l-1.201 0.213zM475.136 233.131l-168.789 296.448 132.096-12.459v136.533c0 5.373 4.355 9.728 9.728 9.728v0h53.931c5.373 0 9.728-4.355 9.728-9.728v0-136.533l132.096 12.459z" />
106
+ <glyph unicode="&#xa5;" glyph-name="fi-color-pick-eyedropper" d="M646.997 791.552l45.056-45.227-304.299-304.469c0.395-4.001 0.62-8.648 0.62-13.348 0-37.29-14.17-71.27-37.419-96.85l22.634-22.41 22.528-22.528c25.415 23.141 59.352 37.311 96.598 37.311 4.687 0 9.321-0.224 13.893-0.663l303.887 304.514 45.056-45.227 51.2 51.2-208.896 208.384zM506.197 385.365c-6.949-6.006-16.072-9.665-26.049-9.665-22.056 0-39.936 17.88-39.936 39.936 0 9.977 3.659 19.1 9.708 26.1l273.024 273.016 56.32-56.491zM999.424 935.424v0c-15.17 15.196-36.14 24.597-59.307 24.597s-44.137-9.401-59.306-24.596l-118.273-118.444 118.613-119.467 118.272 118.443c15.411 15.23 24.955 36.367 24.955 59.733s-9.544 44.503-24.947 59.725zM486.571 51.2h-370.688v371.029h156.331c5.090 0 9.216 4.126 9.216 9.216v96.768c0 5.090-4.126 9.216-9.216 9.216h-262.997c-5.090 0-9.216-4.126-9.216-9.216v-582.997c0-0.008 0-0.016 0-0.025 0-5.090 4.126-9.216 9.216-9.216 0.24 0 0.478 0.009 0.714 0.027l583.819-0.002c5.090 0 9.216 4.126 9.216 9.216v262.485c0 5.090-4.126 9.216-9.216 9.216h-97.451c-5.090 0-9.216-4.126-9.216-9.216z" />
107
+ <glyph unicode="&#xa7;" glyph-name="fi-comment" d="M278.357 74.411c-21.845-59.563-82.944-102.4-122.197-123.392-18.091-9.899-3.584-15.019 11.605-15.019h5.291c103.879 7.708 198.451 41.865 278.727 95.689 16.569-3.403 38.282-4.641 60.267-4.724 282.916 0 512.121 190.976 512.121 426.666s-229.205 426.667-512 426.667-512-191.147-512-426.667c0-165.376 113.152-308.395 278.357-379.221z" />
108
+ <glyph unicode="&#xa8;" glyph-name="fi-text-color" d="M982.528 18.944h-942.421c-21.731-1.439-38.813-19.418-38.813-41.387s17.082-39.948 38.688-41.38l942.546-0.007c22.904 0 41.472 18.568 41.472 41.472s-18.568 41.472-41.472 41.472zM170.667 114.517h78.507c0.067 0 0.145-0.001 0.224-0.001 15.639 0 28.938 10.017 33.833 23.984l48.375 127.569h359.765l49.835-131.413c5.533-10.993 16.263-18.657 28.876-19.787l0.138-0.010h81.749c0.053 0 0.115 0 0.178 0 19.7 0 35.669 15.97 35.669 35.669 0 3.903-0.627 7.66-1.786 11.175l0.072-0.252v4.267l-279.040 707.413c-4.82 14.486-18.252 24.747-34.080 24.747-0.019 0-0.038 0-0.056 0h-122.024c-15.996-0.132-29.494-10.673-34.064-25.174l-280.304-710.228c-1.384-3.655-2.186-7.881-2.186-12.294 0-19.7 15.97-35.669 35.669-35.669 0.228 0 0.456 0.002 0.684 0.006zM512 760.491l140.971-373.419h-282.283z" />
109
+ <glyph unicode="&#xa9;" glyph-name="fi-layout" horiz-adv-x="1021" d="M1020.757 763.392h-1020.757v133.632c0 34.781 28.195 62.976 62.976 62.976h894.805c34.781 0 62.976-28.195 62.976-62.976zM236.373-64h-173.397c-34.781 0-62.976 28.195-62.976 62.976v697.856h236.373zM299.52 696.832h721.408v-378.368h-721.408v378.368zM957.781-64h-658.261v315.392h721.237v-252.416c0-34.781-28.195-62.976-62.976-62.976z" />
110
+ <glyph unicode="&#xaa;" glyph-name="comment-2" d="M512 899.413c-315.733 0-512-161.28-512-421.205 0-170.667 83.285-300.203 235.349-368.128-5.584-48.986-22.586-93.124-48.264-130.888l-32.461-43.192h54.784c147.115 0 233.301 63.488 281.429 121.515h21.163c320.683 0 512 157.525 512 421.205 0 259.413-196.096 420.693-512 420.693zM512 185.344v0l-80.213 2.389-39.253-48.299c-2.901-3.413-5.803-6.827-8.875-10.069l-17.067-18.432 11.605 76.459-89.259 39.936c-105.813 47.275-159.403 131.755-159.403 250.88-1.024 264.363 267.093 292.864 382.464 292.864s383.488-28.501 383.488-292.864c0-254.635-239.957-292.693-382.976-292.693z" />
111
+ <glyph unicode="&#xab;" glyph-name="fi-laptop" d="M125.099 136.533h773.803c29.523 0.097 53.419 24.053 53.419 53.589 0 0 0 0 0 0v473.941c0 29.502-23.916 53.419-53.419 53.419h-773.803c-29.502 0-53.419-23.916-53.419-53.419v-474.112c0 0 0 0 0 0 0-29.537 23.896-53.492 53.409-53.589zM178.517 610.475h666.795v-367.275h-666.624zM999.424 82.944h-974.677c-13.667 0-24.747-11.079-24.747-24.747v-59.733c-0.002-0.108-0.003-0.235-0.003-0.363 0-6.447 2.465-12.318 6.505-16.722l34.117-37.87c4.505-4.65 10.806-7.537 17.782-7.537 0.409 0 0.815 0.010 1.219 0.029l902.258-0.002c6.688 0.147 12.7 2.925 17.065 7.337l37.549 37.89c4.351 4.388 7.070 10.401 7.168 17.048v59.752c-0.096 13.534-11.042 24.48-24.567 24.576zM605.013-2.731c0.019-0.161 0.029-0.347 0.029-0.536 0-2.563-1.949-4.672-4.446-4.924l-177.344-0.002c-2.518 0.254-4.466 2.362-4.466 4.926 0 0.189 0.011 0.375 0.031 0.558l-0.002 24.041c-0.019 0.161-0.029 0.347-0.029 0.536 0 2.563 1.949 4.672 4.446 4.924l177.514 0.002c2.518-0.254 4.466-2.362 4.466-4.926 0-0.189-0.011-0.375-0.031-0.558z" />
112
+ <glyph unicode="&#xac;" glyph-name="fi-arrows-expand" d="M52.565 271.872l-52.565-315.051c-0.168-0.922-0.264-1.982-0.264-3.065 0-4.931 1.992-9.397 5.214-12.637l-0.001 0.001c3.114-3.258 7.493-5.283 12.345-5.283 1.188 0 2.347 0.121 3.466 0.352l314.087 53.058c8.563 1.452 15.003 8.814 15.003 17.681 0 4.962-2.016 9.452-5.274 12.697l-61.441 61.441 164.864 164.864c3.269 3.247 5.292 7.745 5.292 12.715s-2.023 9.468-5.291 12.714l-113.665 113.665c-3.247 3.269-7.745 5.292-12.715 5.292s-9.468-2.023-12.714-5.291l-164.524-164.865-61.44 61.44c-3.245 3.259-7.736 5.275-12.698 5.275-8.867 0-16.229-6.44-17.666-14.897zM971.435 624.128l52.565 315.051c0.152 0.878 0.239 1.888 0.239 2.919 0 4.919-1.982 9.374-5.19 12.613l0.001-0.001c-3.296 3.419-7.916 5.543-13.032 5.543-1.064 0-2.106-0.092-3.119-0.268l-314.089-53.403c-8.563-1.452-15.003-8.814-15.003-17.681 0-4.962 2.016-9.452 5.274-12.697l61.441-61.441-164.864-165.035c-3.269-3.247-5.292-7.745-5.292-12.715s2.023-9.468 5.291-12.714l113.665-113.665c3.247-3.269 7.745-5.292 12.715-5.292s9.468 2.023 12.714 5.291l165.036 165.036 61.44-61.44c3.245-3.259 7.736-5.275 12.698-5.275 8.867 0 16.229 6.44 17.666 14.897z" />
113
+ <glyph unicode="&#xae;" glyph-name="fi-update" horiz-adv-x="977" d="M976.384 604.672l-0.853 253.952c-0.539 11.636-10.103 20.865-21.823 20.865-4.598 0-8.864-1.42-12.383-3.846l-92.087-66.342c-92.193 93.060-220.016 150.684-361.299 150.699q-15.021 0-29.699-0.853h-3.755c-9.387 0-18.773-1.536-27.989-2.56h-1.536c-150.735-19.56-278.998-102.185-359.307-220.091-3.935-5.817-5.604-10.823-5.604-16.218 0-8.799 4.44-16.562 11.201-21.17l128.259-88.974c4.269-2.864 9.522-4.57 15.175-4.57 8.987 0 16.966 4.314 21.98 10.985 1.757 2.801 3.805 5.191 5.683 7.751s5.632 7.68 8.704 11.435l7.168 8.704q6.827 8.021 13.995 15.531l6.315 6.144q6.485 6.315 13.483 12.288l6.315 5.291q9.216 7.339 18.773 13.995l5.973 3.925q8.533 5.632 17.067 10.581l5.12 2.901c7.168 3.755 14.507 7.339 21.845 10.581l6.656 2.731c7.68 3.243 15.531 6.144 23.552 8.704h3.072c7.851 2.389 15.872 4.437 23.893 6.144l4.608 1.024q13.483 2.731 27.136 4.096h3.072c9.728 1.024 19.456 1.536 29.355 1.536 4.437 0 8.704 0 13.141 0s9.387 0 13.995 0 11.605-1.365 17.067-2.219l9.557-1.536c6.485-1.195 12.8-2.56 19.115-4.096l5.632-1.536c9.387-2.56 18.603-5.632 27.648-9.045l3.072-1.195c29.425-11.752 54.832-26.628 77.602-44.686l-15.138-9.927-85.333-61.611c-5.666-4.001-9.321-10.523-9.321-17.899 0-9.536 6.11-17.645 14.629-20.625l367.087-125.316c2.087-0.73 4.493-1.151 6.998-1.151 12.065 0 21.845 9.78 21.845 21.845 0 0.045 0 0.089 0 0.134zM916.309 180.907c-1.178 7.109-5.123 13.125-10.669 17.012l-128.253 88.972c-4.269 2.864-9.522 4.57-15.175 4.57-8.987 0-16.966-4.314-21.98-10.985-1.757-2.801-3.805-5.191-5.683-7.751s-5.632-7.68-8.533-11.435l-7.168-8.704c-4.437-5.291-9.216-10.581-13.995-15.531l-6.315-5.973c-4.437-4.267-8.875-8.363-13.483-12.288l-6.315-5.291q-9.216-7.339-18.773-13.995l-5.973-3.925c-5.632-3.755-11.435-7.168-17.067-10.581l-5.12-2.901c-7.168-3.925-14.507-7.339-21.845-10.581l-6.656-2.731c-7.68-3.243-15.531-6.144-23.552-8.704l-3.072-0.853c-7.851-2.389-15.701-4.437-23.893-6.144l-4.608-1.024q-13.312-2.731-27.136-4.096h-3.072c-9.728-1.024-19.456-1.536-29.355-1.536-4.437 0-8.704 0-12.971 0s-9.557 0-14.165 0-11.435 1.365-17.067 2.219l-9.557 1.536c-6.485 1.195-12.8 2.56-19.115 4.096l-6.144 1.536c-9.387 2.56-18.603 5.632-27.648 9.045l-3.072 1.195c-29.425 11.677-54.837 26.501-77.606 44.517l15.142 9.926 85.333 61.611c5.509 4.016 9.048 10.447 9.048 17.705 0 9.562-6.143 17.688-14.698 20.649l-367.087 125.316c-2.119 0.76-4.563 1.2-7.111 1.2-4.765 0-9.171-1.538-12.749-4.144-5.262-3.865-8.743-10.014-8.982-16.987l-0.001-133.84 1.195-254.635c0.539-11.636 10.103-20.865 21.823-20.865 4.598 0 8.864 1.42 12.383 3.846l92.087 66.342c92.193-93.060 220.016-150.684 361.299-150.699q15.021 0 29.869 0.853h3.584c9.387 0 18.773 1.536 28.16 2.56h1.536c150.735 19.56 278.998 102.185 359.307 220.091 3.889 5.777 5.53 10.725 5.53 16.057 0 1.71-0.169 3.38-0.491 4.996z" />
114
+ <glyph unicode="&#xaf;" glyph-name="fi-arrow-right" horiz-adv-x="921" d="M912.213 468.992l-388.949 388.608c-5.491 5.46-13.061 8.836-21.419 8.836s-15.927-3.375-21.42-8.837l-62.463-62.121c-5.46-5.491-8.836-13.061-8.836-21.419s3.375-15.927 8.837-21.42l230.569-230.399h-621.909c0 0 0 0-0.001 0-14.644 0-26.527-11.823-26.623-26.444v-95.583c0-14.704 11.92-26.624 26.624-26.624h621.909l-230.4-230.4c-5.46-5.491-8.836-13.061-8.836-21.419s3.375-15.927 8.837-21.42l62.292-61.951c5.491-5.46 13.061-8.836 21.419-8.836s15.927 3.375 21.42 8.837l388.948 388.607c5.38 5.401 8.706 12.851 8.706 21.077s-3.326 15.677-8.707 21.078z" />
115
+ <glyph unicode="&#xb0;" glyph-name="hummingbird" d="M1009.323 570.197c-72.363-3.755-161.621-7.509-238.933-8.192l192.171 128.512c19.042-34.586 34.899-74.653 45.502-116.806zM512 960c189.862-0.034 355.572-103.406 443.951-256.93-61.487-12.553-225.839-36.617-400.943-48.051-34.133-2.219-55.979-36.181-68.267-62.464 0 0-31.061 195.925-244.907 145.408-41.984 18.944-81.237 34.133-116.224 46.251 94.16 107.956 231.957 175.787 385.597 175.787 0.279 0 0.557 0 0.836-0.001zM0 448c0 0.221-0.001 0.483-0.001 0.746 0 121.29 42.344 232.689 113.056 320.222 39.45-15.556 74.218-33.581 106.162-55.431s37.807-77.121 65.284-135.489 46.592-91.136 54.613-161.109 65.877-184.491 168.277-221.867c-34.879-47.972-65.982-102.598-90.759-160.574 26.898-39.4 57.774-69.843 91.053-97.495-280.204 0.74-507.686 229.298-507.686 510.988 0 0.003 0 0.007 0 0.010zM573.952-60.416c0 19.115 0 36.352 1.195 51.2 2.803 46.275 12.454 89.473 27.966 129.761 19.44 50.098 31.281 111.481 31.281 175.63 0 12.407-0.443 24.711-1.314 36.896-1.165 15.156-3.891 30.694-7.991 45.664l392.938 149.478c4.007-24.063 6.297-51.79 6.297-80.052 0-260.928-195.185-476.268-447.514-507.978z" />
116
+ <glyph unicode="&#xb1;" glyph-name="uptime" horiz-adv-x="887" d="M117.248 504.832l35.328 57.003c9.877 16.209 27.456 26.867 47.525 26.867 0.993 0 1.979-0.026 2.959-0.078 20.763-0.726 38.722-12.635 48.013-29.9l40.938-76.591 89.088 160.768c9.871 17.66 28.452 29.404 49.776 29.404 24.488 0 45.359-15.488 53.351-37.202l78.975-220.042 35.84 61.611c10.083 16.967 28.318 28.161 49.168 28.161 0.115 0 0.229 0 0.343-0.001h121.156l117.76-56.832v256l-443.733 256-443.733-256v-256zM681.472 391.168l-80.555-138.24c-10.081-16.963-28.309-28.154-49.151-28.16h-5.633c-22.088 2.314-40.256 16.942-47.658 36.811l-78.465 216.117-78.677-143.36c-9.525-17.627-27.868-29.4-48.96-29.4-0.788 0-1.572 0.016-2.352 0.049-21.287 0.311-39.79 12.404-49.233 30.070l-43.84 82.737c-10.18-16.093-27.882-26.624-48.044-26.624-0.029 0-0.059 0-0.088 0l-148.817 56.832v-256l443.733-256 443.733 256v256l-117.76-56.832z" />
117
+ <glyph unicode="&#xb4;" glyph-name="fi-annotate" horiz-adv-x="1022" d="M948.565 199.509v496.981c43.813 24.306 72.976 70.29 72.976 123.085 0 77.479-62.809 140.288-140.288 140.288-47.69 0-89.822-23.796-115.17-60.163l-510.083-0.458c-25.659 36.738-67.742 60.47-115.368 60.47-77.479 0-140.288-62.809-140.288-140.288 0-52.685 29.042-98.586 71.99-122.569l0.712-497.346c-43.837-24.3-73.019-70.296-73.019-123.108 0-77.479 62.809-140.288 140.288-140.288 58.492 0 108.623 35.797 129.681 86.678l480.939 0.931c21.399-51.812 71.53-87.61 130.022-87.61 77.479 0 140.288 62.809 140.288 140.288 0 52.812-29.183 98.808-72.302 122.743zM207.189 199.509v496.811c27.728 15.333 49.308 38.895 61.769 67.359l483.17 0.908c12.815-29.372 34.395-52.934 61.399-67.899l0.723-497.008c-18.613-10.583-34.070-24.624-45.957-41.377l-514.001-0.436c-12.344 17.098-27.971 31.035-46.046 41.106z" />
118
+ <glyph unicode="&#xb5;" glyph-name="fi-profile-male" horiz-adv-x="1019" d="M978.261 134.144c-43.008 70.997-144.043 85.333-194.56 102.4s-147.627 87.893-147.627 87.893v51.2c19.87 18.419 36.867 39.546 50.502 62.877l0.698 1.294c2.048 3.584 3.755 6.997 5.461 10.24v1.365c1.365 3.072 2.56 5.803 3.584 8.533v1.877c0.943 2.416 1.88 5.437 2.626 8.532 1.791 8.072 3.238 17.391 4.129 26.872 9.117 3.338 13.725-1.612 25.331 28.255 13.141 34.133 35.328 109.909 20.821 125.952-3.371 3.949-8.353 6.437-13.916 6.437-3.855 0-7.432-1.195-10.379-3.234 7.133 29.653 11.189 63.652 11.189 98.599 0 8.856-0.26 17.651-0.774 26.378-6.599 106.316-111.73 167.927-209.010 177.484-107.861 10.581-105.131-8.363-116.736-46.763-78.848 1.195-112.299-71.339-112.299-71.339-19.115-43.691-20.309-100.693-3.584-182.613-2.887 2-6.463 3.195-10.318 3.195-5.563 0-10.546-2.488-13.895-6.412-14.528-16.068 7.659-92.356 20.8-125.977s17.067-24.235 26.965-27.819c0-4.437 1.365-22.187 2.389-26.795 13.335-37.939 35.415-69.97 63.908-94.837l0.263-52.79s-97.28-70.997-147.797-87.893-151.381-31.744-194.389-102.4-41.643-198.656-41.643-198.656h1019.392s1.877 127.147-41.131 198.144z" />
119
+ <glyph unicode="&#xb6;" glyph-name="fi-comments" d="M874.667 10.24c14.028-28.98 36.738-51.911 64.715-65.848 10.549-5.661 2.698-8.392-5.323-8.392h-2.901c-55.804 4.31-106.547 22.826-149.573 51.896-9.11-1.858-20.974-2.539-32.991-2.573-151.772 0-274.823 102.4-274.823 228.864s123.563 228.523 275.456 228.523 274.773-102.571 274.773-229.035c0-88.747-60.757-165.547-149.333-203.435zM400.213 213.675c0 167.253 156.672 303.445 349.013 303.445h13.141c-72.533 97.792-202.24 162.987-350.208 162.987-227.669-0.171-412.16-153.941-412.16-343.723 0-132.779 90.624-247.637 222.891-304.811-1.365-43.349-44.373-73.557-69.973-87.552-9.728-5.291-1.877-8.021 6.144-8.021h2.901c63.522 4.464 120.844 27.848 167.209 64.486 24.295-4.938 52.997-7.484 82.294-7.484 0.184 0 0.369 0 0.553 0 31.177 0.009 61.68 2.99 91.222 8.675-63.547 51.045-102.025 126.912-103.196 211.796z" />
120
+ <glyph unicode="&#xb7;" glyph-name="defender" d="M922.965 925.867c-2.901 0-212.309 22.016-330.923 34.133v-358.4l-80.043-36.523-79.531 35.499v359.424c-119.125-12.117-328.533-34.133-331.435-34.133-58.271-12.934-101.199-64.173-101.199-125.438 0-7.354 0.618-14.563 1.806-21.579l87.788-576.951c6.661-42.74 32.169-78.424 67.598-98.803l354.973-167.096 355.157 166.741c36.081 20.752 61.581 56.427 68.166 98.378l87.994 578.315c1.066 6.216 1.675 13.377 1.675 20.679 0 61.596-43.335 113.070-101.18 125.599zM806.059 215.552l-294.059-131.925-294.229 131.925-60.928 378.88 355.157-158.379 354.987 158.379z" />
121
+ <glyph unicode="&#xb8;" glyph-name="fi-sitemap" d="M425.472 558.763h173.056c25.921 0 46.933 21.013 46.933 46.933v173.227c0 25.921-21.013 46.933-46.933 46.933h-173.056c-25.921 0-46.933-21.013-46.933-46.933v-173.227c0-25.921 21.013-46.933 46.933-46.933zM598.528 203.093h-173.056c-25.921 0-46.933-21.013-46.933-46.933v-173.227c0-25.921 21.013-46.933 46.933-46.933h173.056c25.921 0 46.933 21.013 46.933 46.933v173.227c0 25.921-21.013 46.933-46.933 46.933zM977.067 203.093h-173.227c-25.921 0-46.933-21.013-46.933-46.933v-173.227c0-25.921 21.013-46.933 46.933-46.933h173.227c25.921 0 46.933 21.013 46.933 46.933v173.227c0 25.921-21.013 46.933-46.933 46.933zM220.16 203.093h-173.227c-25.921 0-46.933-21.013-46.933-46.933v-173.227c0-25.921 21.013-46.933 46.933-46.933h173.227c25.921 0 46.933 21.013 46.933 46.933v173.227c0 25.921-21.013 46.933-46.933 46.933zM178.005 378.027h290.133v-85.333h89.088v85.333h290.133v-85.333h89.088v85.333c0 49.202-39.886 89.088-89.088 89.088h-669.355c-49.129-0.097-88.917-39.946-88.917-89.088 0 0 0 0 0 0v-85.333h89.088z" />
122
+ <glyph unicode="&#xba;" glyph-name="fi-magnifying-glass-search" d="M1024 39.595l-226.816 226.816c50.818 70.758 81.267 159.126 81.267 254.605 0 242.711-196.756 439.467-439.467 439.467s-439.467-196.756-439.467-439.467c0-242.711 196.756-439.467 439.467-439.467 95.479 0 183.847 30.449 255.922 82.165l225.67-227.715zM146.432 520.704c0 0.051 0 0.111 0 0.171 0 161.744 131.12 292.864 292.864 292.864s292.864-131.12 292.864-292.864c0-161.744-131.12-292.864-292.864-292.864-161.606 0.194-292.573 131.101-292.864 292.665z" />
123
+ <glyph unicode="&#xbb;" glyph-name="fi-ab-testing" d="M189.269 574.293c0-16.306-13.219-29.525-29.525-29.525s-29.525 13.219-29.525 29.525c0 16.306 13.219 29.525 29.525 29.525s29.525-13.219 29.525-29.525zM271.872 574.293c0-16.306-13.219-29.525-29.525-29.525s-29.525 13.219-29.525 29.525c0 16.306 13.219 29.525 29.525 29.525s29.525-13.219 29.525-29.525zM354.475 574.293c-0.004-16.303-13.222-29.517-29.525-29.517-16.306 0-29.525 13.219-29.525 29.525 0 16.066 12.833 29.135 28.807 29.517 16.342 0.001 29.561-13.218 29.561-29.525zM432.64 240.981l-78.336 174.080c-2.226 4.78-5.679 8.672-9.96 11.37-4.205 2.546-9.154 4.015-14.445 4.015s-10.241-1.469-14.461-4.020c-4.577-2.699-8.239-6.8-10.392-11.713l-78.059-173.39c-1.585-3.025-2.528-6.604-2.56-10.401 0.077-6.843 3.162-12.939 7.989-17.050 4.416-3.949 10.235-6.346 16.615-6.346 0.17 0 0.34 0.002 0.509 0.005 0.137-0.005 0.328-0.007 0.519-0.007 9.718 0 18.031 6.017 21.417 14.528l16.097 36.337h85.333l15.701-35.84c3.406-8.854 11.842-15.023 21.719-15.023 0.165 0 0.329 0.002 0.492 0.005 0.194-0.007 0.452-0.011 0.71-0.011 6.271 0 11.998 2.333 16.359 6.178 4.79 4.102 7.824 10.191 7.824 16.989 0 0.019 0 0.038 0 0.058-0.001 3.785-0.883 7.366-2.452 10.548zM307.2 304.128l22.357 51.2 22.528-51.2zM769.024 313.173v0c-2.73 3.592-5.759 6.73-9.118 9.48 2.097 2.291 4.115 4.688 5.927 7.241 6.795 10.053 10.777 22.229 10.777 35.334 0 18.947-8.322 35.95-21.511 47.554-13.971 10.285-31.428 16.423-50.318 16.423-1.776 0-3.539-0.054-5.288-0.161l-65.125 0.012c-6.616-0.037-12.619-2.629-17.079-6.838-4.461-4.316-7.259-10.353-7.326-17.043v-170.679c0.068-6.703 2.865-12.739 7.332-17.060 4.455-4.204 10.458-6.796 17.066-6.833h68.274c1.251-0.065 2.716-0.101 4.189-0.101 19.515 0 37.524 6.448 52.013 17.329 13.21 11.032 21.697 27.767 21.697 46.483 0 1.062-0.027 2.118-0.081 3.167 0.024 0.403 0.034 1.050 0.034 1.699 0 13.753-4.494 26.456-12.093 36.721zM720.725 351.573c-5.973-3.725-13.226-5.934-20.994-5.934-1.141 0-2.27 0.048-3.386 0.141l-37.742-0.010v37.205h38.4c30.037 0 30.037-12.459 30.037-19.115 0.059-0.532 0.093-1.15 0.093-1.775 0-5.144-2.275-9.756-5.874-12.885zM658.603 297.984h42.496c28.331 0 30.72-11.264 30.72-21.845s-4.096-14.336-5.461-15.36c-6.014-3.57-13.258-5.68-20.995-5.68-1.502 0-2.985 0.079-4.445 0.234l-42.314-0.016zM480.256 174.933c-0.052 0-0.114-0.001-0.177-0.001-15.081 0-27.307 12.226-27.307 27.307 0 3.242 0.565 6.352 1.602 9.236l77.082 221.676c4.534 9.167 13.821 15.36 24.555 15.36 15.081 0 27.307-12.226 27.307-27.307 0-2.117-0.241-4.178-0.697-6.157l-77.106-221.683c-3.733-10.641-13.583-18.182-25.229-18.431zM917.845 42.155h-811.691v586.24h811.691zM976.725 734.72h-929.451c-0.001 0-0.002 0-0.003 0-26.109 0-47.275-21.166-47.275-47.275 0-0.18 0.001-0.36 0.003-0.539v-703.631c0-26.109 21.166-47.275 47.275-47.275h929.451c26.109 0 47.275 21.166 47.275 47.275v703.659c0 26.109-21.166 47.275-47.275 47.275z" />
124
+ <glyph unicode="&#xbf;" glyph-name="fi-clipboard-notes" horiz-adv-x="730" d="M730.453 836.779v0s0 1.195 0 1.707c0 34.404-27.89 62.293-62.293 62.293h-174.251v40.107c0 0.051 0.001 0.111 0.001 0.171 0 10.462-8.482 18.944-18.944 18.944 0 0-0.001 0-0.001 0h-218.965c-10.462 0-18.944-8.482-18.944-18.944v-40.448h-174.763c-34.404 0-62.293-27.89-62.293-62.293s0-1.024 0-1.707v0-837.803c-0.001-0.152-0.002-0.332-0.002-0.512 0-34.404 27.89-62.293 62.293-62.293 0.001 0 0.002 0 0.002 0h605.696c0 0 0 0 0 0 34.344 0 62.196 27.792 62.293 62.113s0 0.009 0 0.009v0 838.656zM612.352 53.931h-494.933v728.747h59.392v-36.352s0 0 0-1.195c0-11.876 9.628-21.504 21.504-21.504h333.312c11.876 0 21.504 9.628 21.504 21.504s0 0 0 0v37.547h59.221zM236.373 553.472c-0.094 7.751-6.4 13.999-14.164 13.999-0.12 0-0.24-0.002-0.36-0.004h-30.702c-7.823 0-14.165-6.342-14.165-14.165v-30.891c0-7.823 6.342-14.165 14.165-14.165h30.72c0.051-0.001 0.111-0.001 0.171-0.001 7.823 0 14.165 6.342 14.165 14.165 0 0 0 0.001 0 0.001v0 31.061zM553.131 553.472c0 7.823-6.342 14.165-14.165 14.165h-229.035c-7.823 0-14.165-6.342-14.165-14.165v-30.891c0-7.823 6.342-14.165 14.165-14.165h229.035c7.823 0 14.165 6.342 14.165 14.165v0 30.891zM236.373 435.029c0 7.823-6.342 14.165-14.165 14.165h-30.72c-7.785-0.095-14.070-6.381-14.165-14.156v-30.9c0-7.823 6.342-14.165 14.165-14.165h30.379c0.051-0.001 0.111-0.001 0.171-0.001 7.823 0 14.165 6.342 14.165 14.165 0 0 0 0.001 0 0.001v0 30.891zM553.131 435.029c0 7.823-6.342 14.165-14.165 14.165h-229.035c-7.785-0.095-14.070-6.381-14.165-14.156v-30.9c0-7.823 6.342-14.165 14.165-14.165h229.035c7.823 0 14.165 6.342 14.165 14.165v0 30.891zM236.373 316.587c0 7.823-6.342 14.165-14.165 14.165h-30.72c-7.785-0.095-14.070-6.381-14.165-14.156v-30.9c0-7.823 6.342-14.165 14.165-14.165h30.379c0.051-0.001 0.111-0.001 0.171-0.001 7.823 0 14.165 6.342 14.165 14.165 0 0 0 0.001 0 0.001v0 30.891zM553.131 316.587c0 7.823-6.342 14.165-14.165 14.165h-229.035c-7.785-0.095-14.070-6.381-14.165-14.156v-30.9c0-7.823 6.342-14.165 14.165-14.165h229.035c7.823 0 14.165 6.342 14.165 14.165v0 30.891z" />
125
+ <glyph unicode="&#xc1;" glyph-name="fi-24-hour-support" horiz-adv-x="968" d="M483.84-64c-267.265 0-483.925 216.661-483.925 483.925s216.661 483.925 483.925 483.925v-136.533c-188.939-4.316-340.452-158.502-340.452-348.075s151.513-343.758 340.051-348.067c0.715-0.008 1.087-0.009 1.459-0.009 80.175 0 153.958 27.369 212.515 73.273l82.363-107.917c-80.231-62.694-182.536-100.528-293.678-100.528-0.794 0-1.588 0.002-2.381 0.006zM779.776 36.864l-82.773 107.691 9.557 7.509 87.040-104.277-13.824-11.093zM874.325 133.632l-109.568 80.555c15.913 21.446 29.882 45.89 40.787 71.935l126.637-48.895c-16.334-39.103-35.678-72.813-58.609-103.702zM963.243 352.256l-134.485 19.115c2.173 14.773 3.413 31.826 3.413 49.17 0 0.114 0 0.228 0 0.341 0.001 0.341 0.002 0.766 0.002 1.191 0 12.136-0.621 24.127-1.832 35.943l135.291 12.342c1.564-14.718 2.455-31.793 2.455-49.077 0-24.288-1.761-48.165-5.163-71.51zM811.691 540.16c-10.574 28.943-23.525 53.955-39.175 76.985l113.415 74.567c20.549-30.843 38.366-66.252 51.687-103.79zM716.8 678.4c-20.26 18.367-43.050 34.571-67.627 47.901l62.166 120.377c36.795-19.902 68.545-42.563 97.156-68.615zM454.656 719.189v240.811l164.181-120.491-164.181-120.32zM364.373 421.547l-79.019-100.693v-39.765h172.032v47.445h-98.987l37.547 53.76c16.256 18.205 30.601 38.703 42.363 60.785 8.105 16.273 12.485 33.435 12.762 51.592 0.106 1.658 0.166 3.486 0.166 5.327 0 21.61-8.231 41.298-21.728 56.1-14.557 13.363-34.134 21.594-55.634 21.594-1.782 0-3.55-0.057-5.303-0.168-0.187 0.020-0.689 0.024-1.193 0.024-16.309 0-31.55-4.575-44.508-12.512-13.059-8.053-23.722-19.647-30.642-33.444-7.22-14.358-11.322-30.733-11.322-48.065 0-0.55 0.004-1.099 0.012-1.647l56.831 0.083c-0.076 1.203-0.119 2.608-0.119 4.024 0 11.841 3.015 22.978 8.318 32.685 4.18 7.434 12.38 12.614 21.789 12.614 0.017 0 0.034 0 0.051 0 0.196 0.007 0.429 0.010 0.663 0.010 8.002 0 14.967-4.442 18.564-10.994 4.401-8.104 6.955-17.616 6.955-27.725 0-1.032-0.027-2.058-0.079-3.077-0.22-10.879-2.84-21.235-7.353-30.5-6.556-13.584-13.945-25.617-22.393-36.807zM585.557 572.928l-98.987-192 2.56-36.352h96.597v-63.488h56.661v63.488h24.917v46.592h-24.747v181.76zM585.557 391.339h-43.861l42.837 95.403 1.195 2.219z" />
126
+ <glyph unicode="&#xc2;" glyph-name="fi-arrow-down" horiz-adv-x="838" d="M439.808-3.755l388.949 388.949c5.46 5.491 8.836 13.061 8.836 21.419s-3.375 15.927-8.837 21.42l-62.463 62.463c-5.491 5.46-13.061 8.836-21.419 8.836s-15.927-3.375-21.42-8.837l-230.399-230.228v621.568c0.001 0.101 0.002 0.221 0.002 0.341 0 14.704-11.92 26.624-26.624 26.624-0.001 0-0.002 0-0.002 0h-95.403c-14.704 0-26.624-11.92-26.624-26.624v-621.909l-230.4 230.229c-5.491 5.46-13.061 8.836-21.419 8.836s-15.927-3.375-21.42-8.837l-62.292-62.463c-5.46-5.491-8.836-13.061-8.836-21.419s3.375-15.927 8.837-21.42l388.948-388.948c5.401-5.38 12.851-8.706 21.077-8.706s15.677 3.326 21.078 8.707z" />
127
+ <glyph unicode="&#xc5;" glyph-name="fi-megaphone" d="M203.435 724.139c-1.755 0.054-3.82 0.085-5.892 0.085-112.354 0-203.435-91.081-203.435-203.435s91.081-203.435 203.435-203.435c2.072 0 4.136 0.031 6.193 0.092 18.037 0.034 33.228 13.458 36.023 31.015l0.028 0.21v338.261c0 20.454-16.581 37.035-37.035 37.035zM1024 890.027c0 0.001 0 0.003 0 0.004 0 20.359-16.505 36.864-36.864 36.864-8.522 0-16.368-2.891-22.611-7.747l-325.549-187.671h-293.717c-20.454 0-37.035-16.581-37.035-37.035v-351.403c2.287-18.335 17.758-32.388 36.519-32.427h261.124l356.011-204.8c6.582-6.206 15.479-10.020 25.266-10.020 20.102 0 36.446 16.090 36.856 36.094 0.001 1.404 0.001 2.769 0.001 4.134v0 751.957s0 1.365 0 2.219zM597.333 29.013v2.731l-115.371 195.755c-5.893 8.039-14.829 13.548-25.079 14.83l-0.18 0.018h-98.304c-19.097-1.524-34.016-17.397-34.016-36.754 0-6.831 1.858-13.229 5.097-18.714 0.889-1.37 1.901-2.707 3.008-3.959l-0.030 0.034 131.755-228.181 1.365-2.219c6.629-9.966 17.812-16.445 30.509-16.445 9.176 0 17.562 3.384 23.978 8.973l-0.044-0.037 68.267 39.083c8.188 6.811 13.363 17.002 13.363 28.402 0 6.076-1.47 11.808-4.073 16.861z" />
128
+ <glyph unicode="&#xc6;" glyph-name="fi-page-pdf" horiz-adv-x="717" d="M253.44 307.541h-58.368v-109.227h33.109v34.133h25.259c0.757-0.054 1.64-0.085 2.53-0.085 20.736 0 37.547 16.81 37.547 37.547s-16.81 37.547-37.547 37.547c-0.89 0-1.773-0.031-2.648-0.092zM249.173 261.291h-20.992v17.067h20.992c5.632 0 9.899-2.731 9.899-8.704s-4.437-8.533-9.899-8.533zM358.4 307.541h-48.469v-109.227h48.469c34.133 0 59.733 19.797 59.733 54.784s-25.6 54.443-59.733 54.443zM358.4 227.157h-15.36v51.2h15.36c0.742 0.082 1.602 0.128 2.474 0.128 13.196 0 23.893-10.697 23.893-23.893 0-0.706-0.031-1.405-0.091-2.095 0.007 0.033 0.007-0.035 0.007-0.102 0-13.95-11.309-25.259-25.259-25.259-0.36 0-0.719 0.008-1.076 0.022zM438.784 198.315h33.109v40.789h48.64v28.843h-48.64v10.752h49.835v28.843h-82.944v-109.227zM716.8 891.733v0 47.787c0 11.311-9.169 20.48-20.48 20.48h-389.12l-307.2-307.2v-696.32c0-11.311 9.169-20.48 20.48-20.48h675.84c11.311 0 20.48 9.169 20.48 20.48v29.013zM117.931 53.931v557.909h209.749c11.311 0 20.48 9.169 20.48 20.48v209.749h250.88v-788.139z" />
129
+ <glyph unicode="&#xc7;" glyph-name="fi-graph-bar" d="M463.531 242.176h-173.397c-10.274 0-18.603-8.329-18.603-18.603v-268.971c0-10.274 8.329-18.603 18.603-18.603h173.397c10.274 0 18.603 8.329 18.603 18.603v269.141c0 10.274-8.329 18.603-18.603 18.603zM733.867 797.867h-173.397c-10.274 0-18.603-8.329-18.603-18.603v-824.661c0-10.274 8.329-18.603 18.603-18.603h173.397c10.274 0 18.603 8.329 18.603 18.603v824.661c0 10.274-8.329 18.603-18.603 18.603zM1005.397 547.328h-173.227c-10.274 0-18.603-8.329-18.603-18.603v-574.123c0-10.274 8.329-18.603 18.603-18.603h173.227c10.274 0 18.603 8.329 18.603 18.603v574.123c0 10.274-8.329 18.603-18.603 18.603zM191.829 547.328h-173.227c-10.274 0-18.603-8.329-18.603-18.603v-574.123c0-10.274 8.329-18.603 18.603-18.603h173.227c10.274 0 18.603 8.329 18.603 18.603v574.123c0 10.274-8.329 18.603-18.603 18.603z" />
130
+ <glyph unicode="&#xcd;" glyph-name="fi-shopping-cart" d="M885.76 796.501l-3.072 6.656c-9.899 20.309-30.72 32.085-46.421 24.747l-341.333-159.061c-15.872-7.339-20.651-30.549-10.752-51.2l3.072-6.656c9.899-21.163 30.72-32.256 46.592-24.917l341.333 159.061c15.872 7.339 20.651 30.379 10.752 51.2zM1014.784 564.224h-1005.568c-5.090 0-9.216-4.126-9.216-9.216v-63.147c-0.009-0.153-0.014-0.332-0.014-0.512 0-5.090 4.126-9.216 9.216-9.216 0.005 0 0.010 0 0.015 0h29.183l48.128-515.072c1.627-17.483 16.225-31.062 33.995-31.062 0.049 0 0.097 0 0.146 0h804.857c0.015 0 0.034 0 0.052 0 18.191 0 33.058 14.23 34.078 32.166l28.847 513.968h26.453c5.090 0 9.216 4.126 9.216 9.216v63.147c0 5.090-4.126 9.216-9.216 9.216zM298.155 100.693c0-12.065-9.78-21.845-21.845-21.845h-114.859c-12.065 0-21.845 9.78-21.845 21.845v83.285c0 12.065 9.78 21.845 21.845 21.845h115.2c12.065 0 21.845-9.78 21.845-21.845zM298.155 275.285c0-12.065-9.78-21.845-21.845-21.845h-114.859c-12.065 0-21.845 9.78-21.845 21.845v83.285c0.379 11.768 10.010 21.163 21.835 21.163 0.004 0 0.008 0 0.011 0h115.199c12.065 0 21.845-9.78 21.845-21.845zM494.933 101.205c0-12.065-9.78-21.845-21.845-21.845h-115.712c-12.065 0-21.845 9.78-21.845 21.845v82.773c0 12.065 9.78 21.845 21.845 21.845h115.2c0.152 0.004 0.332 0.006 0.512 0.006 12.065 0 21.845-9.78 21.845-21.845 0-0.002 0-0.004 0-0.006zM494.933 275.797c0-12.065-9.78-21.845-21.845-21.845h-115.712c-12.065 0-21.845 9.78-21.845 21.845v82.773c0.379 11.768 10.010 21.163 21.835 21.163 0.004 0 0.008 0 0.011 0h115.199c0.156 0.004 0.339 0.006 0.522 0.006 11.827 0 21.459-9.399 21.834-21.134zM690.347 101.205c0-12.065-9.78-21.845-21.845-21.845h-115.371c-12.065 0-21.845 9.78-21.845 21.845v82.773c0 12.065 9.78 21.845 21.845 21.845h115.2c12.065 0 21.845-9.78 21.845-21.845zM690.347 275.797c0-12.065-9.78-21.845-21.845-21.845h-115.371c-12.065 0-21.845 9.78-21.845 21.845v82.773c0.379 11.768 10.010 21.163 21.835 21.163 0.004 0 0.008 0 0.011 0h115.199c12.065 0 21.845-9.78 21.845-21.845zM886.101 101.205c0-12.065-9.78-21.845-21.845-21.845h-115.371c-12.065 0-21.845 9.78-21.845 21.845v82.773c0 12.065 9.78 21.845 21.845 21.845h115.2c12.065 0 21.845-9.78 21.845-21.845zM886.101 275.797c0-12.065-9.78-21.845-21.845-21.845h-115.371c-12.065 0-21.845 9.78-21.845 21.845v82.773c0.379 11.768 10.010 21.163 21.835 21.163 0.004 0 0.008 0 0.011 0h115.199c12.065 0 21.845-9.78 21.845-21.845z" />
131
+ <glyph unicode="&#xce;" glyph-name="fi-storage-server-data" d="M973.995 704h-923.989c-27.758-0.668-50.005-23.329-50.005-51.186 0-0.005 0-0.010 0-0.015v-238.933c0-0.004 0-0.009 0-0.014 0-27.857 22.247-50.518 49.943-51.185l924.051-0.001c27.758 0.668 50.005 23.329 50.005 51.186 0 0.005 0 0.010 0 0.015v238.933c0 0.004 0 0.009 0 0.014 0 27.857-22.247 50.518-49.943 51.185zM137.728 484.864c-26.1 0.853-46.933 22.216-46.933 48.445 0 26.769 21.7 48.469 48.469 48.469 26.76 0 48.455-21.687 48.469-48.444 0-26.77-21.7-48.471-48.469-48.471zM973.995 277.333h-923.989c-27.758-0.668-50.005-23.329-50.005-51.186 0-0.005 0-0.010 0-0.015v-238.933c0-0.004 0-0.009 0-0.014 0-27.857 22.247-50.518 49.943-51.185l924.051-0.001c27.758 0.668 50.005 23.329 50.005 51.186 0 0.005 0 0.010 0 0.015v238.933c0 0.004 0 0.009 0 0.014 0 27.857-22.247 50.518-49.943 51.185zM137.728 58.197c-26.1 0.853-46.933 22.216-46.933 48.445 0 26.769 21.7 48.469 48.469 48.469 26.76 0 48.455-21.687 48.469-48.444 0-26.77-21.7-48.471-48.469-48.471z" />
132
+ <glyph unicode="&#xcf;" glyph-name="fi-star-line" d="M512 840.533l106.496-301.056h310.272l-242.517-192.512 11.776-33.109 98.133-278.016-258.901 156.16-25.259 15.531-25.259-15.531-258.901-155.307 98.133 278.357 11.776 33.109-27.477 21.845-215.040 170.155h310.272l11.605 32.768 94.891 267.605zM512 939.008c-10.813-0.086-19.955-7.143-23.161-16.893l-117.98-332.803h-346.283c-13.554-0.025-24.532-11.018-24.532-24.576 0-7.796 3.63-14.744 9.292-19.247l270.386-214.055-121.003-342.357c-0.92-2.477-1.453-5.339-1.453-8.325 0-13.573 11.003-24.576 24.576-24.576 4.699 0 9.091 1.319 12.824 3.607l317.333 190.403 317.44-190.293c3.626-2.227 8.017-3.546 12.717-3.546 13.573 0 24.576 11.003 24.576 24.576 0 2.986-0.533 5.848-1.508 8.495l-120.948 342.016 270.507 214.016c5.713 4.541 9.343 11.489 9.343 19.286 0 13.573-11.003 24.576-24.576 24.576-0.045 0-0.089 0-0.134 0h-346.276l-117.931 333.995c-3.255 9.924-12.398 16.98-23.2 17.067z" />
133
+ <glyph unicode="&#xd0;" glyph-name="fi-cloudflare" horiz-adv-x="1365" d="M932.181 147.968l6.485 24.064c3.108 8.491 4.906 18.294 4.906 28.518 0 17.179-5.076 33.173-13.811 46.562-13.519 17.979-35.017 29.809-59.296 30.22l-492.439 6.316c-3.23 0.028-6.081 1.626-7.831 4.067-1.033 1.574-1.636 3.467-1.636 5.501 0 1.22 0.217 2.39 0.615 3.473 1.735 4.77 6.123 8.241 11.369 8.632l496.854 6.147c65.808 7.31 120.215 49.655 144.631 107.717l28.767 75.238c0.449 1.456 0.708 3.13 0.708 4.864s-0.259 3.408-0.74 4.985c-34.165 145.122-162.656 251.577-316.011 251.577-140.86 0-260.742-89.814-305.504-215.3-24.681 15.744-54.945 26.574-87.739 26.574-80.495 0-145.749-65.254-145.749-145.749 0-12.669 1.616-24.96 4.654-36.678-111.636-2.593-200.583-93.776-200.583-205.734 0-11.059 0.868-21.916 2.539-32.506 0.462-3.568 4.473-7.191 9.33-7.191 0.026 0 0.053 0 0.079 0h909.82c5.306 0.085 9.765 3.616 11.242 8.449zM1096.192 488.448h-15.701c-2.789-0.948-4.845-3.345-5.285-6.271l-19.12-66.603c-3.108-8.491-4.906-18.294-4.906-28.518 0-17.179 5.076-33.173 13.811-46.562 13.826-17.607 35.467-29.027 59.775-29.027 0.095 0 0.189 0 0.284 0.001l104.945-6.315c3.108-0.113 5.824-1.694 7.489-4.065 1.034-1.575 1.637-3.468 1.637-5.502 0-1.22-0.217-2.39-0.615-3.473-1.735-4.77-6.123-8.241-11.369-8.632l-108.929-6.147c-66.085-7.315-120.688-49.968-144.975-108.393l-8.284-21.826c-0.238-0.61-0.376-1.317-0.376-2.056 0-3.097 2.426-5.627 5.482-5.794l375.481-0.001c0.025 0 0.056 0 0.086 0 4.527 0 8.355 2.987 9.623 7.097 6.246 21.661 9.828 46.459 9.828 72.093 0 148.585-120.33 269.066-268.857 269.312z" />
134
+ <glyph unicode="&#xd2;" glyph-name="fi-page" horiz-adv-x="717" d="M716.8 891.733v0 47.787c0 11.311-9.169 20.48-20.48 20.48h-389.12l-307.2-307.2v-696.32c0-11.311 9.169-20.48 20.48-20.48h675.84c11.311 0 20.48 9.169 20.48 20.48v29.013zM117.931 53.931v557.909h209.749c11.311 0 20.48 9.169 20.48 20.48v209.749h250.88v-788.139z" />
135
+ <glyph unicode="&#xd3;" glyph-name="chevron-left" horiz-adv-x="530" d="M469.163 38.4c-5.492-4.91-11.792-9.080-18.644-12.262-7.344-3.354-15.383-5.196-23.852-5.196s-16.508 1.841-23.738 5.146c-7.031 3.224-13.388 7.396-19.008 12.382l-366.854 367.035c-5.463 5.454-9.854 11.98-12.829 19.236-3.048 7.438-4.735 15.621-4.735 24.198s1.687 16.76 4.748 24.235c2.991 7.15 7.377 13.616 12.814 19.027l367.789 365.4c10.89 10.984 25.984 17.784 42.667 17.784s31.777-6.8 42.662-17.78l41.818-43.012c5.397-5.383 9.775-11.785 12.822-18.894 3.056-7.305 4.744-15.342 4.744-23.773s-1.689-16.467-4.746-23.789c-3.067-7.024-7.441-13.367-12.816-18.703l-279.044-281.433 279.040-280.576c5.394-5.385 9.771-11.787 12.821-18.893 3.065-7.145 4.76-15.008 4.76-23.266 0-0.178-0.001-0.357-0.002-0.535 0-0.035 0.001-0.108 0.001-0.182 0-8.477-1.693-16.559-4.76-23.926-2.85-6.986-7.257-13.255-12.781-18.327l-42.021-43.895z" />
136
+ <glyph unicode="&#xd4;" glyph-name="fi-arrow-up" horiz-adv-x="838" d="M397.824 899.755l-388.949-388.949c-5.46-5.491-8.836-13.061-8.836-21.419s3.375-15.927 8.837-21.42l62.463-62.463c5.491-5.46 13.061-8.836 21.419-8.836s15.927 3.375 21.42 8.837l230.399 230.228v-621.568c-0.001-0.102-0.002-0.222-0.002-0.342 0-14.645 11.824-26.528 26.446-26.623h95.412c14.704 0 26.624 11.92 26.624 26.624v621.909l230.4-230.4c5.491-5.46 13.061-8.836 21.419-8.836s15.927 3.375 21.42 8.837l62.463 62.463c5.46 5.491 8.836 13.061 8.836 21.419s-3.375 15.927-8.837 21.42l-388.948 389.119c-5.401 5.38-12.851 8.706-21.077 8.706s-15.677-3.326-21.078-8.707z" />
137
+ <glyph unicode="&#xd8;" glyph-name="fi-camera" d="M512 424.107c65.98 0 119.467-53.487 119.467-119.467s-53.487-119.467-119.467-119.467c-65.98 0-119.467 53.487-119.467 119.467s53.487 119.467 119.467 119.467zM976.896 671.061v0h-210.603v35.84c0 26.015-21.089 47.104-47.104 47.104h-414.379c-26.015 0-47.104-21.089-47.104-47.104v-35.328h-210.603c0 0-0.001 0-0.001 0-26.015 0-47.104-21.089-47.104-47.104 0-0.12 0-0.24 0.001-0.36v-640.664c-0.001-0.101-0.001-0.221-0.001-0.341 0-26.015 21.089-47.104 47.104-47.104 0 0 0.001 0 0.001 0h929.792c0 0 0.001 0 0.001 0 26.015 0 47.104 21.089 47.104 47.104 0 0.12 0 0.24-0.001 0.36v640.664c0 26.015-21.089 47.104-47.104 47.104zM515.072 59.904c-134.693 0-243.883 109.19-243.883 243.883s109.19 243.883 243.883 243.883c134.693 0 243.883-109.19 243.883-243.883s-109.19-243.883-243.883-243.883zM961.024 482.133h-186.368v125.952h186.368v-125.952z" />
138
+ <glyph unicode="&#xda;" glyph-name="fi-page-search" horiz-adv-x="931" d="M930.645 891.733v0 47.787c0 11.311-9.169 20.48-20.48 20.48h-389.12l-307.2-307.2v-61.952c0.906-10.518 9.641-18.72 20.304-18.773h76.805c10.668 0.053 19.404 8.255 20.304 18.697l0.005 0.076v20.992h210.261c11.311 0 20.48 9.169 20.48 20.48v209.749h250.88v-788.139h-481.28v35.669c0 11.311-9.169 20.48-20.48 20.48h-76.8c-11.311 0-20.48-9.169-20.48-20.48v-133.12c0-11.311 9.169-20.48 20.48-20.48h675.84c11.311 0 20.48 9.169 20.48 20.48v29.013zM460.8 340.992c-0.095 104.648-84.95 189.444-189.611 189.444-104.719 0-189.611-84.892-189.611-189.611 0-35.638 9.832-68.98 26.931-97.46l-92.979-91.643c-9.826-9.508-15.926-22.815-15.926-37.547 0-28.843 23.381-52.224 52.224-52.224 0.079 0 0.158 0 0.237 0.001 0.060 0 0.146-0.001 0.232-0.001 14.667 0 27.931 6.007 37.466 15.695l95.068 95.068c25.146-13.181 54.934-20.916 86.528-20.916 104.538 0 189.299 84.674 189.44 189.18zM161.109 340.992c0 60.796 49.284 110.080 110.080 110.080s110.080-49.284 110.080-110.080c0-60.796-49.284-110.080-110.080-110.080s-110.080 49.284-110.080 110.080z" />
139
+ <glyph unicode="&#xdf;" glyph-name="fi-mouse-scroll" horiz-adv-x="460" d="M230.229 730.283c-127.152 0-230.229-103.077-230.229-230.229v-333.824c0-127.246 103.154-230.4 230.4-230.4s230.4 103.154 230.4 230.4v333.824c0 0 0 0 0 0 0 127.152-103.077 230.229-230.229 230.229-0.12 0-0.24 0-0.36 0zM274.261 493.739c0-23.093-18.72-41.813-41.813-41.813h-4.096c-23.093 0-41.813 18.72-41.813 41.813v121.685c0 23.093 18.72 41.813 41.813 41.813h4.096c23.093 0 41.813-18.72 41.813-41.813zM238.933 764.928h-17.067c-0.051 0-0.111-0.001-0.171-0.001-13.984 0-25.332 11.288-25.429 25.25v29.364c0.096 13.971 11.444 25.259 25.429 25.259 0.060 0 0.12 0 0.18-0.001h17.057c13.971-0.097 25.259-11.445 25.259-25.429 0 0 0 0 0-0.001v-29.184c-0.096-13.911-11.348-25.163-25.25-25.259zM238.933 879.957h-17.067c-0.051 0-0.111-0.001-0.171-0.001-14.044 0-25.429 11.385-25.429 25.429 0 0 0 0 0 0.001v29.184c0 0 0 0 0 0.001 0 14.044 11.385 25.429 25.429 25.429 0.060 0 0.12 0 0.18-0.001h17.057c13.971-0.097 25.259-11.445 25.259-25.429 0 0 0 0 0-0.001v-29.184c0 0 0 0 0-0.001 0-13.984-11.288-25.332-25.249-25.429z" />
140
+ <glyph unicode="&#xe5;" glyph-name="fi-google-analytics" horiz-adv-x="1365" d="M1365.333 740.693c0-67.299-54.557-121.856-121.856-121.856s-121.856 54.557-121.856 121.856c0 67.299 54.557 121.856 121.856 121.856s121.856-54.557 121.856-121.856zM525.141 479.232c-0.291-67.079-54.736-121.344-121.855-121.344-67.299 0-121.856 54.557-121.856 121.856s54.557 121.856 121.856 121.856c0.060 0 0.119 0 0.179 0 67.29 0 121.847-54.557 121.847-121.856zM985.771 224.085c0-0.101 0-0.221 0-0.341 0-67.299-54.557-121.856-121.856-121.856s-121.856 54.557-121.856 121.856c0 67.299 54.557 121.856 121.856 121.856s121.856-54.557 121.856-121.856zM750.933 347.477l-182.955 101.547c-6.88-37.128-25.193-69.147-51.088-93.082l182.843-101.649c6.867 37.132 25.183 69.154 51.087 93.081zM258.048 396.8l-244.565-274.432c-8.403-9.382-13.54-21.84-13.54-35.499 0-29.44 23.866-53.305 53.305-53.305 15.781 0 29.961 6.858 39.721 17.756l244.439 273.117c-33.987 15.219-61.298 40.275-78.923 71.52zM1182.891 580.949c0-25.261-20.478-45.739-45.739-45.739s-45.739 20.478-45.739 45.739c0 25.261 20.478 45.739 45.739 45.739s45.739-20.478 45.739-45.739zM1106.944 482.133c0-25.261-20.478-45.739-45.739-45.739s-45.739 20.478-45.739 45.739c0 25.261 20.478 45.739 45.739 45.739s45.739-20.478 45.739-45.739zM1031.168 383.659c0-25.261-20.478-45.739-45.739-45.739s-45.739 20.478-45.739 45.739c0 25.261 20.478 45.739 45.739 45.739s45.739-20.478 45.739-45.739z" />
141
+ <glyph unicode="&#xe6;" glyph-name="fi-layers" d="M1011.883 558.080l-447.829-260.267c-14.438-8.497-31.806-13.517-50.347-13.517s-35.908 5.019-50.819 13.773l-450.77 260.181c-7.29 4.311-12.102 12.132-12.102 21.077s4.812 16.766 11.989 21.015l435.655 253.161c17.935 10.569 39.513 16.813 62.549 16.813s44.615-6.244 63.135-17.131l438.54-253.122c7.29-4.311 12.102-12.132 12.102-21.077s-4.812-16.766-11.989-21.015zM1011.883 251.904l-182.784 105.643-264.875-153.6c-14.438-8.497-31.806-13.517-50.347-13.517s-35.908 5.019-50.819 13.773l-268.157 154.197-182.784-106.325c-7.29-4.311-12.102-12.132-12.102-21.077s4.812-16.766 11.989-21.015l451.356-260.499c14.438-8.497 31.806-13.517 50.347-13.517s35.908 5.019 50.819 13.773l447.357 259.327c7.29 4.311 12.102 12.132 12.102 21.077s-4.812 16.766-11.989 21.015z" />
142
+ <glyph unicode="&#xe7;" glyph-name="fi-page-multiple" horiz-adv-x="833" d="M816.128 741.205h-38.059v-733.867c0-9.426-7.641-17.067-17.067-17.067h-542.208v-37.205c0-9.426 7.641-17.067 17.067-17.067h580.267c9.426 0 17.067 7.641 17.067 17.067v771.584c0 9.426-7.641 17.067-17.067 17.067zM723.285 61.952v772.096c0 9.426-7.641 17.067-17.067 17.067h-37.547v-733.867c0-9.426-7.641-17.067-17.067-17.067h-542.208v-38.059c0-9.426 7.641-17.067 17.067-17.067h580.267c9.426 0 17.067 7.641 17.067 17.067zM614.4 171.349v771.584c0 9.426-7.641 17.067-17.067 17.067h-580.267c-9.426 0-17.067-7.641-17.067-17.067v-771.584c0-9.426 7.641-17.067 17.067-17.067h580.267c9.426 0 17.067 7.641 17.067 17.067z" />
143
+ <glyph unicode="&#xf7;" glyph-name="fi-gallery-slider" horiz-adv-x="1071" d="M855.552 789.333h-627.883c-23.963-0.096-43.351-19.544-43.351-43.52 0-0.12 0-0.24 0.001-0.36v-416.92c-0.001-0.102-0.001-0.222-0.001-0.342 0-23.976 19.388-43.423 43.342-43.52h627.892c23.963 0.096 43.351 19.544 43.351 43.52 0 0.12 0 0.24-0.001 0.36v416.92c0.001 0.102 0.001 0.222 0.001 0.342 0 23.976-19.388 43.423-43.342 43.52zM541.696 106.667c-23.187 0-41.984 18.797-41.984 41.984s18.797 41.984 41.984 41.984c23.187 0 41.984-18.797 41.984-41.984s-18.797-41.984-41.984-41.984zM344.576 106.667c-23.187 0-41.984 18.797-41.984 41.984s18.797 41.984 41.984 41.984c23.187 0 41.984-18.797 41.984-41.984s-18.797-41.984-41.984-41.984zM738.645 106.667c-23.187 0-41.984 18.797-41.984 41.984s18.797 41.984 41.984 41.984c23.187 0 41.984-18.797 41.984-41.984s-18.797-41.984-41.984-41.984zM123.221 284.16h-106.155c-9.426 0-17.067 7.641-17.067 17.067v346.965c0 9.426 7.641 17.067 17.067 17.067h106.155zM948.224 284.16h105.301c9.426 0 17.067 7.641 17.067 17.067v346.965c0 9.426-7.641 17.067-17.067 17.067h-105.301z" />
144
+ <glyph unicode="&#xf8;" glyph-name="fi-speed-optimize" horiz-adv-x="1160" d="M538.624 958.635c-301.837-22.621-538.165-273.080-538.165-578.737 0-173.836 76.441-329.818 197.543-436.166 5.686-4.946 12.308-7.618 19.554-7.618 10.608 0 19.879 5.727 24.889 14.258l49.396 85.469c2.31 4.011 3.672 8.821 3.672 13.949 0 7.899-3.233 15.043-8.447 20.181-82.576 77.984-133.977 188.212-133.977 310.447 0 235.641 191.025 426.667 426.667 426.667s426.667-191.025 426.667-426.667c0-122.234-51.401-232.463-133.768-310.251-5.423-5.334-8.656-12.478-8.656-20.377 0-5.128 1.362-9.938 3.745-14.087l49.42-85.195c5.056-8.605 14.266-14.29 24.804-14.29 7.17 0 13.725 2.632 18.752 6.982 121.611 106.875 197.976 262.787 197.976 436.536 0 320.472-259.794 580.267-580.267 580.267-14.006 0-27.896-0.496-41.654-1.472zM523.435 278.528l-66.219 75.435c-5.978 6.784-9.626 15.745-9.626 25.558 0 12.899 6.304 24.326 16 31.368l327.963 235.939c6.198 4.395 13.916 7.025 22.248 7.025 11.496 0 21.823-5.008 28.918-12.96l14.881-17.105c5.747-6.717 9.244-15.508 9.244-25.115 0-10.062-3.836-19.227-10.124-26.115l-276.453-295.223c-7.082-7.509-17.098-12.185-28.207-12.185-11.595 0-22 5.094-29.1 13.165z" />
145
+ <glyph unicode="&#x131;" glyph-name="chevron-down" horiz-adv-x="854" d="M836.267 652.8c5.562-5.106 9.969-11.375 12.847-18.431 2.739-6.961 4.255-14.629 4.255-22.65 0-0.738-0.013-1.472-0.038-2.204 0.004-0.035 0.005-0.201 0.005-0.368 0-8.27-1.695-16.144-4.757-23.293-2.949-6.896-7.151-13.123-12.321-18.397l-366.241-367.094c-5.618-4.978-12.096-9.16-19.153-12.272-7.479-3.363-15.665-5.215-24.282-5.215s-16.803 1.851-24.179 5.178c-7.157 3.155-13.635 7.336-19.334 12.377l-366.001 367.035c-5.157 5.267-9.359 11.493-12.31 18.382-3.064 7.134-4.76 14.985-4.76 23.232 0 0.19 0.001 0.38 0.003 0.57-0.001 0.053-0.001 0.149-0.001 0.246 0 8.455 1.694 16.514 4.76 23.857 2.613 7.223 6.867 13.729 12.297 19.037l42.506 43.359c5.538 4.921 11.896 9.094 18.81 12.263 7.349 3.353 15.388 5.195 23.857 5.195s16.508-1.841 23.738-5.146c7.034-3.211 13.393-7.384 19.004-12.379l281.695-281.021 280.576 279.723c10.689 10.554 25.384 17.073 41.602 17.073 0.314 0 0.628-0.002 0.941-0.007 0.026 0.001 0.112 0.001 0.198 0.001 8.523 0 16.651-1.693 24.065-4.762 6.98-2.849 13.25-7.256 18.322-12.78l43.895-41.509z" />
146
+ <glyph unicode="&#x152;" glyph-name="automate" d="M931.499 741.376c0-141.141-51.2-386.901-170.667-609.792-36.712-69.544-71.186-126.737-108.386-181.941 218.772 71.38 372.244 266.908 372.244 498.28 0 110.018-34.701 211.932-93.754 295.393zM195.584 696.32c222.72 119.467 468.48 171.691 609.621 170.667-11.093 7.68-22.357 15.019-34.133 22.016-74.167 44.233-163.566 70.383-259.072 70.383s-184.905-26.15-261.426-71.68c-108.618-64.826-191.31-168.59-228.802-292.023 47.218 29.124 104.353 63.596 163.286 95.149zM529.067-64c56.491 181.589 193.707 568.832 116.907 645.632s-464.043-59.904-645.973-116.565c0-5.632 0-11.435 0-17.067 0-282.77 229.23-512 512-512h17.067z" />
147
+ <glyph unicode="&#x153;" glyph-name="fi-settings-slider-control" horiz-adv-x="978" d="M803.84 448c-0.001-67.298-54.557-121.854-121.856-121.854s-121.856 54.557-121.856 121.856c0 67.299 54.557 121.856 121.856 121.856 0.24 0 0.48-0.001 0.72-0.002 66.968-0.387 121.136-54.795 121.136-121.854 0-0.001 0-0.001 0-0.002zM494.933 355.328h-462.507c0 0 0 0 0 0-17.909 0-32.427 14.518-32.427 32.427 0 0.060 0 0.12 0 0.18v97.271c0 17.909 14.518 32.427 32.427 32.427h462.507zM868.693 355.328h77.141c17.87 0.096 32.33 14.557 32.427 32.417v97.289c0 17.909-14.518 32.427-32.427 32.427h-77.141zM803.84 838.144c-0.001-67.298-54.557-121.854-121.856-121.854s-121.856 54.557-121.856 121.856c0 67.299 54.557 121.856 121.856 121.856 0.24 0 0.48-0.001 0.72-0.002 66.968-0.387 121.136-54.795 121.136-121.854 0-0.001 0-0.001 0-0.002zM494.933 745.472h-462.507c-17.909 0-32.427 14.518-32.427 32.427v96.768c0 17.909 14.518 32.427 32.427 32.427h462.507zM868.693 745.472h77.141c17.909 0 32.427 14.518 32.427 32.427v96.768c0 17.909-14.518 32.427-32.427 32.427h-77.141zM174.592 57.856c0-67.299 54.557-121.856 121.856-121.856s121.856 54.557 121.856 121.856c0 67.299-54.557 121.856-121.856 121.856s-121.856-54.557-121.856-121.856zM482.816-34.645h463.019c17.909 0 32.427 14.518 32.427 32.427v97.28c0 17.909-14.518 32.427-32.427 32.427h-463.019zM109.568-34.645h-77.141c-17.909 0-32.427 14.518-32.427 32.427v97.28c0.096 17.87 14.557 32.33 32.417 32.427h77.151z" />
148
+ <glyph unicode="&#x192;" glyph-name="fi-profile-female" horiz-adv-x="788" d="M711.68 214.528c-39.595 26.283-125.269 19.797-146.603 59.392-17.067 41.131-64.171 32.939-64.171 32.939v65.536c3.195 3.816 6.339 8.046 9.237 12.452 30.339-12.412 65.302-22.587 101.736-28.338-18.813 47.459 47.064 139.79 48.6 281.443 0.084 2.937 0.131 6.394 0.131 9.862 0 75.089-22.337 144.961-60.728 203.334-10.445 17.137-30.557 29.323-53.516 29.323-4.923 0-9.714-0.56-14.315-1.62 0.427 27.56-40.021 63.912-82.858 73.811-16.314 3.867-35.343 6.496-54.84 7.318-21.109-1.036-40.303-3.657-58.946-7.749-139.312-29.265-210.139-172.625-208.603-314.278s68.267-233.984 46.080-281.771c39.013 6.069 74.036 16.245 107.018 30.285 0.319-5.956 3.462-10.129 6.821-14.114l-0.175-65.494s-47.616 8.192-64.683-32.939c-21.333-39.595-107.008-32.939-146.603-59.392s-75.264-278.528-75.264-278.528h787.627s-36.693 252.245-75.947 278.528z" />
149
+ <glyph unicode="&#x2c6;" glyph-name="fi-compass" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM512 72.533c-207.365 0-375.467 168.102-375.467 375.467s168.102 375.467 375.467 375.467c207.365 0 375.467-168.102 375.467-375.467-0.677-207.091-168.375-374.79-375.401-375.466zM712.363 684.373l-266.923-159.061c-3.664-2.158-6.653-5.093-8.812-8.595l-161.001-269.080c-2.292-3.744-3.649-8.276-3.649-13.125 0-7.085 2.897-13.493 7.572-18.104l1.027-1.027c4.402-4.357 10.392-7.117 17.025-7.338 4.85 0.045 9.324 1.437 13.117 3.815l269.548 160.877c3.594 2.243 6.524 5.228 8.639 8.757l159.127 267.041c2.009 3.709 3.189 8.12 3.189 12.807 0 7.526-3.044 14.34-7.969 19.279-4.607 4.638-10.99 7.51-18.043 7.51-4.805 0-9.299-1.333-13.132-3.649z" />
150
+ <glyph unicode="&#x2c7;" glyph-name="fi-price-tag" horiz-adv-x="856" d="M852.139 230.571l-1.024 1.365-362.667 628.224c-3.008 4.722-7.252 8.418-12.281 10.68l-0.178 0.072-148.48 85.333c-3.981 2.308-8.759 3.67-13.856 3.67-3.868 0-7.553-0.785-10.904-2.203l0.184 0.069-2.731-1.707-286.037-164.693c-8.349-4.804-13.934-13.586-14.165-23.69l-0.001-0.032v-170.667c-0.107-0.92-0.169-1.987-0.169-3.067 0-5.155 1.393-9.984 3.824-14.131l-0.071-0.721 362.325-626.005s0-1.536 1.024-2.219c4.975-8.41 13.999-13.962 24.319-13.962 4.774 0 9.27 1.188 13.209 3.284l-0.152-0.074 437.76 251.904c8.432 4.97 14 14.005 14 24.341 0 5.176-1.396 10.025-3.833 14.192zM244.395 725.333c-7.448-4.358-16.4-6.932-25.953-6.932-28.748 0-52.053 23.305-52.053 52.053s23.305 52.053 52.053 52.053c19.158 0 35.898-10.349 44.935-25.762 4.524-7.716 7.118-16.701 7.118-26.292 0-19.195-10.39-35.964-25.853-44.988z" />
151
+ <glyph unicode="&#x2d8;" glyph-name="fi-folder" d="M955.733 666.965h-452.096c-24.405 29.184-49.493 60.075-55.979 69.291-6.464 13.33-19.893 22.357-35.431 22.357-0.024 0-0.048 0-0.071 0h-179.367c-12.32-0.019-23.307-5.711-30.491-14.603l-62.010-77.045h-72.021c-37.703 0-68.267-30.564-68.267-68.267v-594.432c0-37.703 30.564-68.267 68.267-68.267h887.467c37.703 0 68.267 30.564 68.267 68.267v595.115c0 37.703-30.564 68.267-68.267 68.267z" />
152
+ <glyph unicode="&#x2d9;" glyph-name="fi-book-bookmark" horiz-adv-x="870" d="M870.4 823.467v0c0 12.253-9.933 22.187-22.187 22.187h-46.080v-819.2c-0.085-11.982-9.583-21.717-21.461-22.185l-690.731-0.001c-10.679 0.117-19.552 7.703-21.649 17.775l-0.025 49.126h643.413c12.215 0.096 22.091 9.972 22.187 22.178v844.297c0 0 0 0 0 0.001 0 12.288-9.913 22.26-22.177 22.357h-78.516v-474.283c0-0.022 0-0.048 0-0.074 0-5.844-4.737-10.581-10.581-10.581-3.11 0-5.907 1.342-7.843 3.478l-76.979 76.98c-1.671 2.029-4.184 3.313-6.997 3.313s-5.326-1.284-6.985-3.298l-0.012-0.016-77.483-77.483c-1.866-1.772-4.386-2.871-7.162-2.901-5.812 0.094-10.493 4.776-10.587 10.572v474.292h-406.187c-12.348 0-22.357-10.010-22.357-22.357s0 0 0-0.853v-977.579s0 0 0 0 0 0 0 0v-1.024c0.097-12.274 10.069-22.187 22.357-22.187 0 0 0 0 0.001 0h825.856c12.274 0.097 22.187 10.069 22.187 22.357 0 0 0 0 0 0.001v0z" />
153
+ <glyph unicode="&#x2da;" glyph-name="fi-arrows-out" d="M48.299 244.736l-48.299-289.621c-0.115-0.746-0.181-1.606-0.181-2.481 0-4.608 1.826-8.789 4.794-11.86l-0.005 0.005c3.066-2.963 7.247-4.789 11.855-4.789 0.875 0 1.736 0.066 2.575 0.193l288.162 48.799c7.625 1.814 13.209 8.568 13.209 16.625 0 4.372-1.644 8.361-4.348 11.381l-56.476 56.474 151.552 151.552c2.869 3.046 4.633 7.163 4.633 11.691s-1.763 8.644-4.641 11.699l-103.928 104.269c-3.046 2.869-7.163 4.633-11.691 4.633s-8.644-1.763-11.699-4.641l-151.202-151.544-56.491 56.491c-3.004 2.69-6.992 4.334-11.364 4.334-8.057 0-14.811-5.584-16.602-13.093zM975.701 651.264l48.299 289.621c0.115 0.746 0.181 1.606 0.181 2.481 0 4.608-1.826 8.789-4.794 11.86l0.005-0.005c-3.087 3.078-7.347 4.982-12.051 4.982-0.927 0-1.837-0.074-2.724-0.216l-287.817-48.968c-7.625-1.814-13.209-8.568-13.209-16.625 0-4.372 1.644-8.361 4.348-11.381l56.476-56.474-152.405-151.552c-2.869-3.046-4.633-7.163-4.633-11.691s1.763-8.644 4.641-11.699l104.781-104.439c3.046-2.869 7.163-4.633 11.691-4.633s8.644 1.763 11.699 4.641l151.543 151.544 56.491-56.491c2.999-2.672 6.975-4.305 11.332-4.305 8.109 0 14.896 5.655 16.635 13.236zM715.264-15.701l290.133-47.957c0.746-0.115 1.606-0.181 2.481-0.181 4.608 0 8.789 1.826 11.86 4.794l-0.005-0.005c2.963 3.066 4.789 7.247 4.789 11.855 0 0.875-0.066 1.736-0.193 2.575l-49.311 287.82c-1.814 7.625-8.568 13.209-16.625 13.209-4.372 0-8.361-1.644-11.381-4.348l-56.474-56.476-151.552 152.405c-3.046 2.869-7.163 4.633-11.691 4.633s-8.644-1.763-11.699-4.641l-104.439-104.781c-2.869-3.046-4.633-7.163-4.633-11.691s1.763-8.644 4.641-11.699l151.544-151.543-56.491-56.491c-2.672-2.999-4.305-6.975-4.305-11.332 0-8.109 5.655-14.896 13.236-16.635zM308.736 911.701l-289.621 48.299c-0.7 0.102-1.507 0.16-2.329 0.16-4.683 0-8.925-1.886-12.009-4.94l0.001 0.001c-3.065-3.084-4.96-7.335-4.96-12.029 0-0.874 0.066-1.733 0.193-2.572l48.97-287.82c1.814-7.625 8.568-13.209 16.625-13.209 4.372 0 8.361 1.644 11.381 4.348l56.474 56.476 151.552-151.552c3.046-2.869 7.163-4.633 11.691-4.633s8.644 1.763 11.699 4.641l104.439 103.928c2.869 3.046 4.633 7.163 4.633 11.691s-1.763 8.644-4.641 11.699l-151.715 151.202 56.491 56.491c2.672 2.999 4.305 6.975 4.305 11.332 0 8.109-5.655 14.896-13.236 16.635z" />
154
+ <glyph unicode="&#x2db;" glyph-name="graph-bar-2" d="M569.856 960c-10.085 0-18.261-8.176-18.261-18.261-0.035-0.409-0.055-0.885-0.055-1.365s0.020-0.956 0.059-1.427l-0.004 0.062v-433.493c0-10.085 8.176-18.261 18.261-18.261h433.152c0.409-0.035 0.885-0.055 1.365-0.055s0.956 0.020 1.427 0.059c10.024-0.004 18.2 8.172 18.2 18.257-2.666 249.806-204.366 451.626-453.872 454.483zM918.357 400.213c0 10.085-8.176 18.261-18.261 18.261h-398.336c-10.085 0-18.261 8.176-18.261 18.261v397.141c0.028 0.408 0.044 0.885 0.044 1.365s-0.016 0.957-0.048 1.429c0.003 10.021-8.172 18.197-18.258 18.197h-6.144c-0.051 0-0.111 0-0.171 0-253.739 0-459.435-205.696-459.435-459.435s205.696-459.435 459.435-459.435c253.739 0 459.435 205.696 459.435 459.435 0 1.536 0 2.901 0 4.437s0 0 0 0z" />
155
+ <glyph unicode="&#x2dc;" glyph-name="chevron-right" horiz-adv-x="531" d="M61.781 857.6c5.489 4.917 11.79 9.088 18.646 12.264 7.34 3.363 15.379 5.211 23.85 5.211s16.51-1.848 23.736-5.162c7.036-3.211 13.395-7.384 19.006-12.379l364.98-367.037c5.487-5.503 9.971-12.010 13.152-19.22 3.337-7.412 5.188-15.597 5.188-24.214s-1.851-16.803-5.178-24.179c-3.217-7.176-7.697-13.623-13.162-19.084l-365.91-365.398c-10.689-10.554-25.384-17.073-41.602-17.073-0.314 0-0.628 0.002-0.941 0.007 0.015-0.001-0.024-0.001-0.062-0.001-8.512 0-16.628 1.693-24.030 4.761-7.018 2.679-13.345 6.922-18.512 12.289l-43.877 43.024c-4.912 5.491-9.082 11.792-12.263 18.645-3.364 7.341-5.212 15.381-5.212 23.851s1.848 16.51 5.162 23.736c3.219 7.034 7.392 13.392 12.381 19.008l281.020 281.351-279.723 280.576c-5.394 5.385-9.771 11.787-12.821 18.893-3.381 7.189-5.369 15.135-5.609 23.519-0.003 0.196-0.003 0.329-0.003 0.462 0 8.478 1.694 16.561 4.761 23.928 2.85 6.986 7.257 13.255 12.781 18.327l43.387 43.895z" />
156
+ <glyph unicode="&#x2dd;" glyph-name="chevron-up" horiz-adv-x="853" d="M17.067 244.736c-4.926 5.536-9.099 11.895-12.264 18.811-3.343 7.338-5.179 15.366-5.179 23.822 0 8.746 1.964 17.033 5.474 24.444 3.18 6.706 7.231 12.776 12.035 18.159l366.185 365.664c5.619 4.975 12.097 9.157 19.152 12.272 7.482 3.354 15.667 5.199 24.283 5.199s16.801-1.845 24.181-5.162c7.155-3.158 13.632-7.339 19.333-12.378l366-367.035c5.397-5.383 9.775-11.785 12.822-18.894 2.75-6.785 4.259-14.202 4.259-21.972 0-0.453-0.005-0.905-0.015-1.356 0.002-0.015 0.002-0.111 0.002-0.208 0-8.455-1.694-16.514-4.76-23.857-2.613-7.223-6.867-13.729-12.297-19.037l-42.506-43.359c-5.537-4.924-11.896-9.096-18.811-12.264-7.346-3.363-15.385-5.211-23.856-5.211s-16.51 1.848-23.736 5.162c-6.969 3.225-13.27 7.396-18.832 12.376l-281.869 281.025-280.576-279.723c-10.714-10.555-25.431-17.072-41.671-17.072-0.29 0-0.58 0.002-0.869 0.006 0.011-0.001-0.027-0.001-0.066-0.001-8.512 0-16.628 1.693-24.030 4.761-6.981 2.849-13.251 7.256-18.323 12.78l-44.066 41.509z" />
157
+ <glyph unicode="&#x3a9;" glyph-name="fi-zip" horiz-adv-x="288" d="M0 960h192v-128h-192v128zM242.347 479.915h-196.779c-25.167 0-45.568-20.401-45.568-45.568v-452.779c0-25.167 20.401-45.568 45.568-45.568h196.779c25.167 0 45.568 20.401 45.568 45.568v452.779c0 25.167-20.401 45.568-45.568 45.568zM229.376-0.171h-170.667c-5.844 0-10.581 4.737-10.581 10.581v107.008c0 5.844 4.737 10.581 10.581 10.581h170.667c5.844 0 10.581-4.737 10.581-10.581v-106.837c0-5.844-4.737-10.581-10.581-10.581zM96.085 800.085h192v-128h-192v128zM0 640h192v-128h-192v128z" />
158
+ <glyph unicode="&#x3c0;" glyph-name="fi-academy" horiz-adv-x="1353" d="M676.352 42.325c-73.045 0-382.976 69.973-382.976 210.091v157.013l370.859-151.723c3.558-1.498 7.693-2.369 12.032-2.369s8.474 0.87 12.241 2.446l366.553 149.938 4.096-2.048v-153.6c0-140.117-309.76-210.091-382.805-210.091zM1266.517 21.333l-71.851 87.211-72.021-87.211v403.968c0 3.755 0 18.603 0 18.603l-201.728 102.4 345.941-76.8zM1184.427 529.067l-394.069 77.312c-0.322 0.050-0.694 0.079-1.072 0.079-4.053 0-7.339-3.286-7.339-7.339 0-2.399 1.151-4.529 2.931-5.868l212.328-140.814-320.853-131.243-676.352 276.821 676.352 276.651 676.352-276.651z" />
159
+ <glyph unicode="&#x2013;" glyph-name="fi-zoom-out" d="M584.875 960c-0.154 0-0.336 0-0.519 0-242.522 0-439.125-196.603-439.125-439.125 0-95.43 30.441-183.75 82.142-255.779l-227.372-225.501 103.595-103.595 226.816 226.816c70.664-50.695 158.892-81.067 254.214-81.067 242.522 0 439.125 196.603 439.125 439.125 0 242.434-196.461 438.983-438.862 439.125zM584.875 228.011c-0.051 0-0.111 0-0.171 0-161.744 0-292.864 131.12-292.864 292.864s131.12 292.864 292.864 292.864c161.744 0 292.864-131.12 292.864-292.864 0-0.060 0-0.12 0-0.18-0.291-161.524-131.161-292.393-292.666-292.684zM772.608 571.563h-375.467c-6.221 0-11.264-5.043-11.264-11.264v-78.165c0-6.221 5.043-11.264 11.264-11.264h375.467c6.221 0 11.264 5.043 11.264 11.264v77.995c0 6.221-5.043 11.264-11.264 11.264z" />
160
+ <glyph unicode="&#x2014;" glyph-name="hustle" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM862.891 419.328c-4.096-39.595-19.456-114.005-77.824-159.061-34.957-26.992-79.245-43.462-127.358-44.031-0.805-0.012-1.601-0.019-2.398-0.019-19.34 0-37.801 3.767-54.688 10.607-33.156 14.157-67.29 50.85-65.412 92.834v1.877l17.067 93.184c2.684 11.537 4.293 24.827 4.436 38.469 0.001 23.654-13.311 26.555-23.21 26.555-28.331 0-66.219-37.205-77.653-96.939l-23.040-110.592h-7.851c-0.173-0.001-0.379-0.002-0.584-0.002-28.781 0-54.469 13.242-71.304 33.966-20.101 24.234-24.027 58.879-12.763 109.226l63.829 256-20.821-11.264c-76.89-45.504-127.642-128.014-127.642-222.379 0-142.167 115.196-257.429 257.338-257.536 0.138 0 0.29 0 0.443 0 24.827 0 48.825 3.553 71.511 10.179l6.563 1.939 36.181-89.429-9.899-3.072c-32.113-10.603-69.078-16.718-107.47-16.718-195.394 0-353.792 158.398-353.792 353.792 0 133.919 74.407 250.459 184.134 310.535 25.211 13.761 52.281 24.364 80.775 31.338l6.231 1.501 7.339 35.157h113.835l-50.176-256-2.901-15.019 12.8 8.363c20.948 14.322 46.83 22.87 74.709 22.87 0.075 0 0.151 0 0.226 0 55.626 0 90.271-36.693 90.271-95.573-0.524-21.184-2.675-41.483-6.338-61.251l-14.824-78.013c-0.309-1.655-0.486-3.559-0.486-5.504 0-6.907 2.23-13.294 6.010-18.479 4.456-4.2 10.577-6.837 17.315-6.837 0.792 0 1.576 0.036 2.349 0.108 63.901-0.007 86.258 74.062 89.33 117.923 0.662 6.619 1.040 14.305 1.040 22.079 0 54.114-18.303 103.953-49.057 143.665-35.194 40.291-79.737 72.393-130.243 92.845l16.979 94.18c69.482-23.968 128.484-63.065 175.37-113.566 42.976-47.054 71.974-107.047 80.465-173.451 1.803-13.898 2.737-28.141 2.737-42.602 0-11.217-0.562-22.302-1.661-33.23z" />
161
+ <glyph unicode="&#x2018;" glyph-name="fi-community-people" d="M1006.933 206.507l-174.251 82.773c41.455 28.313 68.313 75.348 68.313 128.655 0 1.33-0.017 2.656-0.050 3.978 0.004 82.919-57.852 150.162-129.191 150.162-25.188-0.030-48.474-8.152-67.404-21.904 11.888-28.284 18.593-61.357 18.593-95.996 0-0.070 0-0.141 0-0.211 0-0.031 0-0.081 0-0.131 0-51.921-15.274-100.275-41.573-140.813 9.235-8.759 19.124-17.128 30.090-23.927l0.561-0.324 111.787-53.248c30.676-16.277 51.214-48.016 51.214-84.552 0-0.575-0.005-1.148-0.015-1.721l0.001-144.981h119.467c16.264 1.302 28.97 14.821 28.97 31.308 0 0.995-0.046 1.978-0.137 2.949l0.009 136.409c0.025 0.492 0.040 1.069 0.040 1.649 0 12.584-6.809 23.577-16.945 29.496zM314.539 289.621c9.565 6.404 17.855 13.609 25.152 21.725-26.524 40.018-42.391 89.074-42.391 141.835 0 0.278 0 0.557 0.001 0.835 0-0.022 0 0.003 0 0.028 0 35.404 7.023 69.167 19.751 99.973-18.433 10.702-40.452 18.255-64.218 18.569-71.416 0.001-129.272-67.242-129.272-150.357-0.034-1.201-0.053-2.615-0.053-4.033 0-53.923 27.603-101.4 69.45-129.070l-174.869-82.619c-10.863-5.857-18.121-17.153-18.121-30.144 0-0.503 0.011-1.003 0.032-1.5l-0.002-138.169c-0.081-0.847-0.127-1.83-0.127-2.825 0-16.487 12.706-30.007 28.859-31.301l115.823-0.007v145.067c-0.006 0.392-0.009 0.856-0.009 1.32 0 37.149 21.309 69.32 52.37 84.959zM800.597 187.221l-214.699 102.229c28.689 18.918 51.133 45.202 64.919 76.188 12.279 26.534 19.194 56.282 19.22 87.643-0.152 18.264-2.571 35.885-6.988 52.696-18.612 76.678-79.711 135.046-153.268 135.046s-131.584-56.491-151.381-132.949c-4.769-16.314-7.621-35.084-7.849-54.485-0.002-0.29-0.002-0.481-0.002-0.673 0-32.828 7.622-63.876 21.193-91.47 14.181-29.538 36.602-54.589 64.276-72.084l-60.551-29.096-155.648-72.533c-13.416-7.233-22.379-21.184-22.379-37.228 0-0.472 0.008-0.942 0.023-1.411l-0.002-170.598c-0.112-1.107-0.176-2.392-0.176-3.692 0-20.471 15.808-37.25 35.883-38.796l553.946-0.008c20.092 1.681 35.762 18.402 35.762 38.784 0 0.946-0.034 1.884-0.1 2.812l0.007 170.542c0.016 0.427 0.024 0.929 0.024 1.432 0 15.977-8.889 29.878-21.99 37.028z" />
162
+ <glyph unicode="&#x2019;" glyph-name="fi-indent-more" horiz-adv-x="1018" d="M967.339 960h-917.333c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h917.333c27.617 0 50.005 22.388 50.005 50.005v46.251c0 27.617-22.388 50.005-50.005 50.005zM967.339 82.261h-917.333c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h917.333c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005zM1017.515 324.779c0 27.617-22.388 50.005-50.005 50.005h-570.197c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-27.617 22.388-50.005 50.005-50.005h570.027c27.617 0 50.005 22.388 50.005 50.005v0 46.080zM1017.515 615.765c0 27.617-22.388 50.005-50.005 50.005h-570.197c-27.617 0-50.005-22.388-50.005-50.005v-46.251c0-27.617 22.388-50.005 50.005-50.005h570.027c27.617 0 50.005 22.388 50.005 50.005v0 46.080zM8.363 332.8c2.346 0.014 4.461 0.992 5.971 2.557l182.445 105.304c2.555 1.415 4.258 4.092 4.267 7.167 0 0.015 0 0.031 0 0.047 0 3.382-2.008 6.296-4.897 7.613l-0.052 0.021-181.931 105.301c-1.502 1.45-3.549 2.343-5.805 2.343-4.542 0-8.239-3.622-8.36-8.135v-213.856c0-4.619 3.744-8.363 8.363-8.363z" />
163
+ <glyph unicode="&#x201a;" glyph-name="upfront" horiz-adv-x="1000" d="M604.501 902.144l82.603-15.189 16.043-200.021-71.68 47.616-173.568 31.915zM166.912 374.955l3.755 125.952-90.112-84.139zM823.808 379.733l153.6 74.069-19.968 254.464-168.789 113.493zM831.829 277.333v0c-59.051-28.672-142.848-68.267-233.301-111.616l184.32-89.429c113.835 54.443 217.429 104.789 217.088 107.691l-13.653 168.277zM175.787 635.733v0l311.296 287.403-196.949 36.864-271.872-251.733-7.68-226.133zM5.973 345.6l-5.973-173.739 488.107-235.861s84.139 39.595 183.979 86.869z" />
164
+ <glyph unicode="&#x201b;" glyph-name="fi-mobile-signal" horiz-adv-x="498" d="M469.845 677.717h-442.539c-15.219-0.658-27.307-13.155-27.307-28.476 0-0.069 0-0.138 0.001-0.206v-684.533c0-0.007 0-0.016 0-0.025 0-15.321 12.088-27.818 27.247-28.474l442.598-0.002c15.741 0 28.501 12.76 28.501 28.501v684.544c0 15.741-12.76 28.501-28.501 28.501zM249.856-34.475c-15.458 0-27.989 12.531-27.989 27.989s12.531 27.989 27.989 27.989c15.458 0 27.989-12.531 27.989-27.989s-12.531-27.989-27.989-27.989zM384.683 50.005h-271.019v514.048h271.019v-514.048zM472.917 839.68c2.291 2.879 3.676 6.569 3.676 10.581s-1.385 7.702-3.703 10.616l0.027-0.035-11.435 11.435-0.683 1.024c-54.197 53.869-128.896 87.166-211.371 87.166s-157.174-33.297-211.386-87.181l-12.273-12.273c-2.388-2.913-3.835-6.677-3.835-10.779 0-4.556 1.785-8.696 4.695-11.756l-0.007 0.007 21.675-23.723c2.879-2.291 6.569-3.676 10.581-3.676s7.702 1.385 10.616 3.703l-0.035-0.027 12.288 12.288c42.781 42.506 101.736 68.778 166.827 68.778s124.046-26.272 166.839-68.791l12.275-12.275c2.913-2.388 6.677-3.835 10.779-3.835 4.556 0 8.696 1.785 11.756 4.695l21.497 21.497zM388.608 776.363v0l-12.117 12.971c-32.541 32.045-77.233 51.831-126.545 51.831-49.739 0-94.777-20.13-127.41-52.688l-12.285-12.285c-2.388-2.913-3.835-6.677-3.835-10.779 0-4.556 1.785-8.696 4.695-11.756l21.838-21.838c2.879-2.291 6.569-3.676 10.581-3.676s7.702 1.385 10.616 3.703l-0.035-0.027 12.288 12.288c21.169 20.936 50.29 33.869 82.432 33.869s61.263-12.933 82.443-33.879l-0.011 0.010 12.288-12.288c2.913-2.388 6.677-3.835 10.779-3.835 4.556 0 8.696 1.785 11.756 4.695l-0.007-0.007 22.869 22.528c2.291 2.879 3.676 6.569 3.676 10.581s-1.385 7.702-3.703 10.616z" />
165
+ <glyph unicode="&#x201c;" glyph-name="fi-mobile" horiz-adv-x="688" d="M648.533 960h-610.816c-21.026-0.939-37.717-18.214-37.717-39.387 0-0.013 0-0.026 0-0.039v-945.15c0-0.060-0.001-0.13-0.001-0.201 0-21.139 16.71-38.375 37.641-39.221l610.893-0.002c21.773 0 39.424 17.651 39.424 39.424v945.152c0 21.773-17.651 39.424-39.424 39.424zM344.917-23.211c-21.302 0-38.571 17.269-38.571 38.571s17.269 38.571 38.571 38.571c21.302 0 38.571-17.269 38.571-38.571s-17.269-38.571-38.571-38.571zM531.115 93.355h-374.101v709.803h374.101v-709.803z" />
166
+ <glyph unicode="&#x201d;" glyph-name="fi-indent-less" horiz-adv-x="1018" d="M967.339 960h-917.333c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h917.333c27.617 0 50.005 22.388 50.005 50.005v46.251c0 27.617-22.388 50.005-50.005 50.005zM967.339 82.261h-917.333c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h917.333c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005zM1017.515 324.779c0 27.617-22.388 50.005-50.005 50.005h-570.197c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-27.617 22.388-50.005 50.005-50.005h570.027c27.617 0 50.005 22.388 50.005 50.005v0 46.080zM1017.515 615.765c0 27.617-22.388 50.005-50.005 50.005h-570.197c-27.617 0-50.005-22.388-50.005-50.005v-46.251c0-27.617 22.388-50.005 50.005-50.005h570.027c27.617 0 50.005 22.388 50.005 50.005v0 46.080zM0 448c0-0.014 0-0.030 0-0.046 0-3.382 2.008-6.296 4.897-7.613l0.052-0.021 181.76-104.96c1.481-1.476 3.525-2.389 5.783-2.389 0.007 0 0.014 0 0.021 0-0.001 0 0 0 0.001 0 4.559 0 8.265 3.647 8.361 8.183v213.684c0 4.619-3.744 8.363-8.363 8.363-0.007 0-0.016 0-0.024 0-2.341 0-4.453-0.982-5.945-2.556l-182.446-105.305c-2.468-1.442-4.1-4.079-4.1-7.097 0-0.085 0.001-0.17 0.004-0.254z" />
167
+ <glyph unicode="&#x201e;" glyph-name="pulse" d="M953.344 795.136c-50.228 49.253-119.1 79.651-195.072 79.651s-144.844-30.398-195.117-79.695c-38.696-39.38-43.475-51.156-51.155-51.156s-12.971 12.288-51.2 51.2c-50.201 49.243-119.044 79.636-194.987 79.636s-144.786-30.393-195.031-79.679c-87.849-88.021-85.289-210.559-38.185-319.615l60.587 29.355 35.328 57.003c9.871 16.236 27.465 26.915 47.553 26.915 1.283 0 2.556-0.044 3.817-0.129 20.718-0.759 38.662-12.655 47.979-29.897l40.085-76.59 89.088 160.939c9.915 17.658 28.522 29.393 49.87 29.393 24.834 0 45.958-15.88 53.773-38.040l79.653-219.535 35.84 61.611c10.096 17.054 28.392 28.315 49.32 28.331h120.834l116.907-56.832-117.248-56.832h-88.235l-80.725-138.411c-10.043-16.964-28.248-28.16-49.069-28.16-0.029 0-0.058 0-0.087 0h-5.115c-22.365 2.055-40.84 16.756-48.34 36.812l-78.294 216.116-79.189-143.36c-9.525-17.627-27.868-29.4-48.96-29.4-0.788 0-1.572 0.016-2.352 0.049-21.388 0.143-40.036 12.205-49.574 29.902l-43.839 82.905c-10.219-16.096-27.949-26.624-48.139-26.624-0.056 0-0.112 0-0.168 0l-60.066 22.869c2.219-3.584 4.096-7.509 6.315-11.093 92.843-143.531 361.131-381.44 441.856-381.44s348.843 238.933 441.515 382.123c79.531 123.563 107.861 283.819 0 392.533z" />
168
+ <glyph unicode="&#x2020;" glyph-name="fi-target" d="M586.581 478.037c3.74-8.972 5.913-19.395 5.913-30.326 0-44.583-36.142-80.725-80.725-80.725s-80.725 36.142-80.725 80.725c0 44.583 36.142 80.725 80.725 80.725 10.715 0 20.942-2.088 30.298-5.878l129.165 129.9c-43.229 33.318-98.153 53.401-157.767 53.401-143.459 0-259.755-116.296-259.755-259.755s116.296-259.755 259.755-259.755c143.459 0 259.755 116.296 259.755 259.755 0 61.341-21.262 117.715-56.819 162.156zM930.987 742.229l-40.96-40.96-60.757 19.797-23.040-23.040c56.894-66.802 91.503-154.104 91.503-249.489 0-213.114-172.763-385.877-385.877-385.877s-385.877 172.763-385.877 385.877c0 213.114 172.763 385.877 385.877 385.877 95.385 0 182.687-34.609 250.034-91.955l19.424 20.42-29.355 63.488 46.251 46.251c-80.54 55.050-180.045 87.906-287.225 87.906-283.43 0-513.195-229.765-513.195-513.195s229.765-513.195 513.195-513.195c283.43 0 513.195 229.765 513.195 513.195 0 110.456-34.896 212.762-94.264 296.494zM915.968 852.309l-43.179 94.72-74.581-74.581 43.179-94.72 94.72-30.549 74.581 74.581-94.72 30.549z" />
169
+ <glyph unicode="&#x2021;" glyph-name="smush" d="M955.733 702.805v0l-442.709-766.805c282.175 0.786 510.618 229.714 510.618 511.998 0 93.773-25.209 181.658-69.22 257.247zM295.765 628.565l216.235-374.443 216.235 374.443h-432.469zM131.243 789.333h762.368c-93.934 105.383-230.060 171.426-381.611 171.426s-287.677-66.043-381.167-170.92zM68.267 702.293v0c-42.518-73.027-67.616-160.731-67.616-254.297 0-282.121 228.18-510.948 510.054-511.996z" />
170
+ <glyph unicode="&#x2022;" glyph-name="fi-magnifying-search-glass-love" d="M1024 33.451l-242.859 242.859c52.055 49.795 98.806 104.294 139.851 163.072 79.456 122.966 106.762 278.272 2.314 382.891-48.581 47.564-115.156 76.915-188.587 76.915s-140.006-29.351-188.634-76.961c-37.841-38.183-42.449-49.959-50.129-49.959s-12.459 11.776-49.835 50.005c-47.787 47.673-113.742 77.152-186.583 77.152-0.824 0-1.648-0.004-2.47-0.011-0.446 0.005-1.122 0.008-1.799 0.008-72.973 0-139.062-29.471-187.015-77.16-104.265-104.607-76.959-259.743 0.012-379.38 89.941-139.435 349.696-370.347 427.691-370.347 34.987 0 106.837 46.592 183.296 110.421l247.296-246.955zM495.957 218.453c-76.117 44.373-245.419 195.413-311.808 299.008-14.848 22.869-85.333 140.629-18.091 207.701 22.936 22.589 54.438 36.537 89.198 36.537 0.682 0 1.362-0.005 2.041-0.016 0.539 0.013 1.297 0.020 2.056 0.020 34.352 0 65.51-13.678 88.323-35.886 13.113-13.285 20.793-22.33 27.108-29.498 28.176-36.777 71.691-60.581 120.811-61.778 49.504 1.197 93.019 25.001 120.919 61.403 6.59 7.542 14.441 17.441 27.411 29.9 23.627 22.433 55.642 36.231 90.88 36.231s67.253-13.798 90.938-36.285c66.673-66.847-3.471-184.607-18.319-207.647-66.219-102.4-235.691-254.635-311.637-299.008z" />
171
+ <glyph unicode="&#x2026;" glyph-name="fi-more" d="M236.715 448c0-65.32-52.952-118.272-118.272-118.272s-118.272 52.952-118.272 118.272c0 65.32 52.952 118.272 118.272 118.272s118.272-52.952 118.272-118.272zM630.272 448c0-65.32-52.952-118.272-118.272-118.272s-118.272 52.952-118.272 118.272c0 65.32 52.952 118.272 118.272 118.272s118.272-52.952 118.272-118.272zM1024 448c0-65.32-52.952-118.272-118.272-118.272s-118.272 52.952-118.272 118.272c0 65.32 52.952 118.272 118.272 118.272s118.272-52.952 118.272-118.272z" />
172
+ <glyph unicode="&#x2030;" glyph-name="fi-microphone-audio" horiz-adv-x="700" d="M699.733 459.605v0 197.632c0 28.748-23.305 52.053-52.053 52.053s-52.053-23.305-52.053-52.053v-196.096c0-135.965-110.222-246.187-246.187-246.187s-246.187 110.222-246.187 246.187v196.096c0 28.748-23.305 52.053-52.053 52.053s-52.053-23.305-52.053-52.053v-197.632h0.853c0.808-174.389 128.953-318.607 296.193-344.497l1.961-75.002h-183.979c-28.701 0-51.968-23.267-51.968-51.968s23.267-51.968 51.968-51.968h471.552c28.748 0 52.053 23.305 52.053 52.053s-23.305 52.053-52.053 52.053h-183.467v74.581c168.91 26.444 296.718 170.557 297.472 344.667zM173.909 462.507c0-97.461 79.008-176.469 176.469-176.469s176.469 79.008 176.469 176.469c0 1.365 0 2.56 0 3.925v0 321.024c0 97.367-78.932 176.299-176.299 176.299s-176.299-78.932-176.299-176.299v0-321.024c0-1.365 0-2.56 0-3.925z" />
173
+ <glyph unicode="&#x2039;" glyph-name="wpmudev-logo" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM847.019 345.6c0.009-0.584 0.014-1.273 0.014-1.964 0-35.154-12.93-67.288-34.294-91.906-20.619-23.931-51.098-39.171-85.143-39.421-66.262 0-119.51 59.733-119.51 133.12v204.971c0.271 1.352 0.427 2.905 0.427 4.495 0 13.196-10.697 23.893-23.893 23.893s-23.893-10.697-23.893-23.893c0-1.59 0.155-3.144 0.452-4.647l-0.025-204.648c0.011-0.64 0.017-1.395 0.017-2.151 0-35.094-12.934-67.168-34.294-91.714-20.621-23.935-51.101-39.175-85.146-39.425-66.262 0-119.51 59.733-119.51 133.12v204.971c0.049 0.602 0.078 1.304 0.078 2.012 0 13.487-10.225 24.586-23.346 25.967-14.416-0.145-25.952-11.776-25.952-26.101 0-0.661 0.025-1.317 0.073-1.965l-0.005-390.74-96.427-75.093v465.92c-0.008 0.565-0.013 1.233-0.013 1.901 0 35.174 12.929 67.328 34.294 91.97 20.643 23.895 51.106 39.122 85.133 39.42 66.271 0 119.519-59.733 119.519-133.29v-204.8c-0.049-0.598-0.077-1.294-0.077-1.996 0-13.453 10.24-24.514 23.351-25.814 13.942 0.61 24.924 11.977 24.924 25.908 0 0.669-0.025 1.333-0.075 1.989l0.005 204.713c0 73.387 53.931 133.291 119.467 133.291s119.467-59.733 119.467-133.291v-204.8c0-13.337 10.812-24.149 24.149-24.149s24.149 10.812 24.149 24.149v390.827l96.427 74.923z" />
174
+ <glyph unicode="&#x203a;" glyph-name="wpmudev-logo-2" d="M771.413 363.861c0.004-0.373 0.007-0.813 0.007-1.254 0-29.18-10.801-55.837-28.623-76.191-17.051-19.741-42.228-32.293-70.341-32.464-54.643 0-99.187 49.323-99.187 109.909v168.277c0.163 0.95 0.256 2.044 0.256 3.16 0 10.84-8.787 19.627-19.627 19.627s-19.627-8.787-19.627-19.627c0-1.116 0.093-2.21 0.272-3.275l-0.016-168.162c0.005-0.41 0.008-0.895 0.008-1.381 0-29.139-10.803-55.756-28.622-76.062-17.016-19.703-42.123-32.243-70.163-32.466-54.652 0-99.025 49.322-99.025 109.909v168.277c0.040 0.492 0.063 1.066 0.063 1.644 0 11.117-8.436 20.264-19.256 21.388-11.005-1.124-19.441-10.271-19.441-21.388 0-0.579 0.023-1.152 0.068-1.719l-0.005-322.144-79.701-61.952v384.171c-0.004 0.354-0.006 0.772-0.006 1.191 0 29.2 10.8 55.877 28.623 76.256 17.062 19.722 42.232 32.268 70.336 32.462 54.647 0 99.021-49.322 99.021-109.909v-168.277c-0.163-0.95-0.256-2.044-0.256-3.16 0-10.84 8.787-19.627 19.627-19.627s19.627 8.787 19.627 19.627c0 1.116-0.093 2.21-0.272 3.275l0.016 168.162c0 60.587 44.373 109.909 99.157 109.909s98.987-49.323 98.987-109.909v-168.277c-0.163-0.95-0.256-2.044-0.256-3.16 0-10.84 8.787-19.627 19.627-19.627s19.627 8.787 19.627 19.627c0 1.116-0.093 2.21-0.272 3.275l0.016 322.104 79.531 61.952zM512 874.667c235.641 0 426.667-191.025 426.667-426.667s-191.025-426.667-426.667-426.667c-235.641 0-426.667 191.025-426.667 426.667s191.025 426.667 426.667 426.667zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512z" />
175
+ <glyph unicode="&#x2044;" glyph-name="fi-wrench-tool" d="M985.6 795.307l-162.133-162.133c-2.102-0.132-4.559-0.207-7.034-0.207-65.98 0-119.467 53.487-119.467 119.467 0 2.475 0.075 4.931 0.224 7.369l62.106 61.788 100.011 100.011c1.55 1.519 2.51 3.634 2.51 5.973s-0.961 4.454-2.509 5.972c-0.592 0.532-1.266 0.988-1.998 1.344l-0.052 0.023h-1.365c-33.663 15.322-73.006 24.252-114.435 24.252-155.806 0-282.112-126.306-282.112-282.112 0-30.298 4.776-59.48 13.616-86.835l-294.958-292.404c-98.646-1.646-177.982-81.999-177.982-180.883 0-99.912 80.995-180.907 180.907-180.907 98.884 0 179.237 79.336 180.881 177.827l294.402 294.725c25.684-8.52 55.252-13.435 85.968-13.435 155.618 0 281.771 126.153 281.771 281.771 0 41.642-9.033 81.175-25.248 116.745l0.72-0.228c-0.311 0.584-0.651 1.087-1.036 1.551-1.507 1.535-3.622 2.495-5.961 2.495s-4.454-0.961-5.972-2.509zM256 116.907c-0.194-41.137-33.587-74.41-74.751-74.41-41.284 0-74.752 33.468-74.752 74.752 0 41.164 33.273 74.557 74.391 74.751 0.12 0.001 0.24 0.001 0.361 0.001 41.284 0 74.752-33.468 74.752-74.752 0-0.12 0-0.241-0.001-0.361z" />
176
+ <glyph unicode="&#x20ac;" glyph-name="devman" horiz-adv-x="989" d="M670.208 850.091c-46.763 109.909-175.275 109.909-175.275 109.909s-129.195 0-175.787-109.909c-53.76-126.635-156.501-549.547-156.501-549.547s80.043-109.909 332.288-109.909 332.117 109.909 332.117 109.909-102.4 422.912-156.501 549.547zM693.077 696.491l-106.325-62.464-68.267 62.464zM484.181 696.491l-71.168-61.611-103.424 62.464zM494.933 265.899c-109.909-119.467-269.483 27.477-269.483 27.477s14.848 65.195 95.573 110.933c-94.379 83.456-55.979 211.285-55.979 211.285l114.859-64 115.029 61.611 115.029-61.611 114.859 64s38.4-127.659-55.979-211.285c80.725-45.739 95.573-110.933 95.573-110.933s-159.915-146.944-269.483-27.477zM769.365 210.773l-274.432-164.864-275.115 164.864-219.819-109.909s52.736-164.864 494.933-164.864 494.933 164.864 494.933 164.864zM494.592 503.296l-60.075-6.827 60.075-74.24 60.075 74.24-60.075 6.827z" />
177
+ <glyph unicode="&#x2122;" glyph-name="fi-cloud" d="M877.056 534.699c-9.452 86.149-81.821 152.577-169.705 152.577-20.539 0-40.23-3.628-58.468-10.278l1.186 0.378c-22.632 94.168-106.125 163.063-205.709 163.063-107.089 0-195.57-79.67-209.405-182.972l-0.119-1.083c-130.264-5.014-233.965-111.827-233.965-242.86 0-133.915 108.311-242.532 242.109-243.028h597.38c0.016 0 0.036 0 0.056 0 101.609 0 183.979 82.37 183.979 183.979 0 88.518-62.513 162.435-145.799 180.012l-1.201 0.212z" />
178
+ <glyph unicode="&#x2202;" glyph-name="smart-crawl" d="M31.744 272.043c74.227-197.089 261.208-334.754 480.341-334.754s406.114 137.665 479.174 331.229zM992.256 623.957c-74.227 197.089-261.208 334.754-480.341 334.754s-406.114-137.665-479.174-331.229zM2.389 495.957c-1.365-15.701-2.389-31.744-2.389-47.957s1.024-32.085 2.389-47.957h1019.221c1.536 15.872 2.389 31.744 2.389 47.957s-0.853 32.256-2.389 47.957z" />
179
+ <glyph unicode="&#x2203;" glyph-name="fi-finger-swipe" horiz-adv-x="913" d="M777.216 472.917c-0.058 0-0.127 0-0.196 0-18.077 0-34.649-6.446-47.541-17.165-6.523 35.039-36.825 61.099-73.213 61.099-18.417 0-35.275-6.676-48.286-17.739-5.634 36.064-36.441 63.228-73.592 63.228-17.325 0-33.27-5.907-45.932-15.818l0.164 212.262c-1.958 39.719-34.638 71.181-74.667 71.181s-72.709-31.462-74.66-71.007l-0.007-387.929h-131.584c-32.085 0-55.808-21.333-55.808-66.389 1.728-42.208 34.238-76.309 75.589-80.525 52.581-0.030 107.707-26.142 111.291-55.667 2.56-17.92 27.136-232.448 242.859-232.448s270.336 150.528 270.336 252.587v209.579c0 41.284-33.468 74.752-74.752 74.752zM194.901 613.035l17.067 17.067c4.555 4.568 7.372 10.873 7.372 17.835s-2.817 13.266-7.373 17.835l-115.37 117.077 116.224 116.224c4.555 4.568 7.372 10.873 7.372 17.835s-2.817 13.266-7.373 17.835l-17.066 17.066c-4.568 4.555-10.873 7.372-17.835 7.372s-13.266-2.817-17.835-7.373l-152.746-151.039c-4.575-4.623-7.402-10.984-7.402-18.005s2.827-13.382 7.404-18.007l151.721-151.721c4.568-4.555 10.873-7.372 17.835-7.372s13.266 2.817 17.835 7.373zM717.995 952.661l-17.067-17.067c-4.555-4.568-7.372-10.873-7.372-17.835s2.817-13.266 7.373-17.835l116.223-116.223-117.419-117.077c-4.555-4.568-7.372-10.873-7.372-17.835s2.817-13.266 7.373-17.835l17.066-17.066c4.568-4.555 10.873-7.372 17.835-7.372s13.266 2.817 17.835 7.373l151.722 151.722c4.575 4.623 7.402 10.984 7.402 18.005s-2.827 13.382-7.404 18.007l-150.526 151.038c-4.568 4.555-10.873 7.372-17.835 7.372s-13.266-2.817-17.835-7.373z" />
180
+ <glyph unicode="&#x2206;" glyph-name="fi-book" horiz-adv-x="870" d="M870.4 823.467v0c0 12.253-9.933 22.187-22.187 22.187h-46.080v-819.2c-0.085-11.982-9.583-21.717-21.461-22.185l-690.731-0.001c-10.679 0.117-19.552 7.703-21.649 17.775l-0.025 48.956h643.413c12.274 0.097 22.187 10.069 22.187 22.357 0 0 0 0 0 0.001v0 844.288c0 0 0 0 0 0.001 0 12.288-9.913 22.26-22.177 22.357h-689.332c-12.348 0-22.357-10.010-22.357-22.357s0 0 0-0.853v-977.579s0 0 0 0 0 0 0 0v-1.024c0.097-12.274 10.069-22.187 22.357-22.187 0 0 0 0 0.001 0h825.856c12.274 0.097 22.187 10.069 22.187 22.357 0 0 0 0 0 0.001v0z" />
181
+ <glyph unicode="&#x220f;" glyph-name="fi-calendar" horiz-adv-x="907" d="M889.515 597.675h-871.424c0 0-0.001 0-0.001 0-9.931 0-17.993-8.002-18.090-17.911v-625.673c0-9.991 8.099-18.091 18.091-18.091h871.424c0.051-0.001 0.111-0.001 0.171-0.001 9.897 0 17.92 8.023 17.92 17.92 0 0.060 0 0.121-0.001 0.181v625.655c0.001 0.051 0.001 0.111 0.001 0.171 0 9.897-8.023 17.92-17.92 17.92-0.060 0-0.121 0-0.181-0.001zM302.421 68.779c-31.96 0.064-62.513 6.006-90.661 16.801-1.627 0.778-3.962 4.026-3.962 7.818 0 0.406 0.027 0.805 0.079 1.197l8.358 61.223c0.395 2.762 1.989 5.086 4.227 6.463 1.187 0.588 2.537 0.919 3.965 0.919s2.778-0.331 3.979-0.92c23.432-9.491 50.672-15.011 79.201-15.011 0.937 0 1.873 0.006 2.807 0.018 31.261-0.001 53.106 14.847 53.106 36.009 0 26.283-12.629 40.448-82.091 44.373-4.77 0.279-8.533 4.215-8.533 9.031 0 0.005 0 0.010 0 0.015v60.927c0 0.008 0 0.017 0 0.026 0 4.755 3.67 8.654 8.332 9.018 60.106 4.781 66.591 21.847 66.591 36.013 0 9.045 0 24.405-40.448 24.405-24.992-0.457-48.421-6.714-69.134-17.477-0.327-0.196-1.737-0.55-3.229-0.55s-2.902 0.355-4.149 0.984c-2.488 1.281-4.294 3.707-4.72 6.583l-8.369 61.147c-0.051 0.36-0.080 0.776-0.080 1.199 0 3.599 2.102 6.707 5.145 8.164 28.28 12.188 61.139 19.262 95.651 19.262 2.753 0 5.495-0.045 8.226-0.134 72.818 0.010 121.97-34.123 121.97-85.323 0-37.888-19.627-65.877-59.904-85.333 34.133-13.312 69.803-37.547 69.803-88.576 0-73.045-61.269-119.467-156.331-119.467zM682.667 82.432c0-4.996-4.050-9.045-9.045-9.045h-74.069c-4.996 0-9.045 4.050-9.045 9.045v246.101l-48.981-18.603c-1.147-0.565-2.498-0.896-3.925-0.896s-2.778 0.331-3.979 0.92c-2.26 1.339-3.87 3.682-4.209 6.419l-8.367 61.312c-0.053 0.365-0.084 0.787-0.084 1.216 0 3.504 2.031 6.534 4.981 7.977l106.719 52.759c1.19 0.626 2.597 1.003 4.089 1.024h37.212c4.858-0.175 8.73-4.155 8.73-9.040 0-0.242-0.010-0.482-0.028-0.72l0.002-348.47zM889.515 879.445h-92.843v-43.52c0-46.080-26.283-95.232-100.181-95.232s-100.181 48.64-100.181 95.232v43.52h-283.819v-43.52c0-46.080-26.283-95.232-100.181-95.232s-100.352 48.64-100.352 95.232v43.52h-93.867c-0.051 0.001-0.111 0.001-0.171 0.001-9.897 0-17.92-8.023-17.92-17.92 0-0.060 0-0.121 0.001-0.181v-183.116c0-9.991 8.099-18.091 18.091-18.091h871.424c0.051-0.001 0.111-0.001 0.171-0.001 9.897 0 17.92 8.023 17.92 17.92 0 0.060 0 0.121-0.001 0.181v183.116c0.001 0.051 0.001 0.111 0.001 0.171 0 9.897-8.023 17.92-17.92 17.92-0.060 0-0.121 0-0.181-0.001zM212.309 798.891c29.867 0 41.984 10.752 41.984 37.035v86.869c0 26.453-12.117 37.205-41.984 37.205s-41.643-10.752-41.643-37.205v-86.869c0-26.453 12.117-37.035 41.984-37.035zM696.491 798.891c29.867 0 41.984 10.752 41.984 37.035v86.869c0 26.453-12.288 37.205-41.984 37.205s-41.984-10.752-41.984-37.205v-86.869c0-26.453 12.117-37.035 41.984-37.035z" />
182
+ <glyph unicode="&#x2211;" glyph-name="fi-news-paper" d="M999.595 768.341h-848.384c-13.479 0-24.405-10.927-24.405-24.405v-106.155h-90.283c0 0-0.001 0-0.002 0-20.051 0-36.328-16.158-36.521-36.163v-543.592c0-67.393 54.633-122.027 122.027-122.027h779.947c67.393 0 122.027 54.633 122.027 122.027v685.909c0 13.479-10.927 24.405-24.405 24.405zM950.784 82.261c0-40.436-32.78-73.216-73.216-73.216h-719.36c25.4 18.793 41.714 48.612 41.813 82.245v603.835h750.933zM273.408 446.635h268.288v-317.099h-268.288v317.099zM273.408 579.584h603.989v-73.216h-603.989v73.216zM614.912 445.269h262.485v-73.216h-262.485v73.216zM614.912 326.144h262.485v-73.216h-262.485v73.216zM614.912 204.288h262.485v-73.216h-262.485v73.216z" />
183
+ <glyph unicode="&#x221a;" glyph-name="fi-bookmark" horiz-adv-x="512" d="M0 960v-1024l256 256 256-256v1024h-512z" />
184
+ <glyph unicode="&#x221e;" glyph-name="fi-layout-grid" d="M200.875 960h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-558.763c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v558.763c0 19.794-16.046 35.84-35.84 35.84zM594.432 960h-164.864c-19.794 0-35.84-16.046-35.84-35.84v-165.035c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v165.035c0 0 0 0 0 0 0 19.794-16.046 35.84-35.84 35.84-0.060 0-0.12 0-0.18 0zM1024 924.16v0c0 19.794-16.046 35.84-35.84 35.84h-165.035c-19.794 0-35.84-16.046-35.84-35.84v0-558.592c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v558.592zM594.432 566.272h-164.864c-19.794 0-35.84-16.046-35.84-35.84v-558.592c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v558.592c0 19.794-16.046 35.84-35.84 35.84zM200.875 172.544h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864c0 19.794-16.046 35.84-35.84 35.84zM988.16 172.544h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864c0 19.794-16.046 35.84-35.84 35.84z" />
185
+ <glyph unicode="&#x222b;" glyph-name="fi-paint-bucket" d="M907.435 459.947v0l-383.488 383.488c-5.437 5.441-12.949 8.806-21.248 8.806s-15.811-3.365-21.248-8.806l-62.806-62.806-134.485 134.315c-10.895 11.861-26.477 19.268-43.789 19.268-32.801 0-59.392-26.591-59.392-59.392 0-17.609 7.664-33.429 19.837-44.305l133.86-133.853-325.803-325.803c-5.39-5.428-8.721-12.906-8.721-21.163s3.331-15.735 8.723-21.164l383.657-383.657c5.437-5.441 12.949-8.806 21.248-8.806s15.811 3.365 21.248 8.806l472.406 472.576c5.4 5.455 8.736 12.962 8.736 21.248s-3.336 15.793-8.739 21.251zM671.915 349.696h-515.584l346.453 346.453 257.877-257.707zM1002.667 151.040l-71.339 123.563-1.195 2.731c-3.657 4.662-9.29 7.629-15.616 7.629s-11.959-2.967-15.584-7.586l-0.032-0.043v-1.195c-0.98-1.283-1.837-2.743-2.509-4.303l-69.683-120.796c-13.484-18.059-21.589-40.821-21.589-65.475 0-60.796 49.284-110.080 110.080-110.080s110.080 49.284 110.080 110.080c0 24.655-8.105 47.416-21.796 65.766z" />
186
+ <glyph unicode="&#x2248;" glyph-name="fi-finger-point" horiz-adv-x="830" d="M744.448 548.523c-0.010 0-0.021 0-0.032 0-20.666 0-39.617-7.347-54.382-19.571-7.65 39.865-42.209 69.443-83.676 69.443-21.062 0-40.342-7.631-55.226-20.278-6.564 41.133-41.748 72.072-84.159 72.072-19.772 0-37.974-6.725-52.443-18.012l0.19 242.489c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333v-440.661l-100.352 95.403c-14.507 11.766-33.194 18.891-53.546 18.891-47.128 0-85.333-38.205-85.333-85.333 0-21.842 8.206-41.767 21.704-56.861l110.008-104.536c40.896-39.332 75.123-85.219 101.064-136.040l32.568-64.493c32.768-75.264 102.059-165.035 251.051-165.035 246.784 0 308.395 171.861 308.395 288.085v238.933c0 47.128-38.205 85.333-85.333 85.333z" />
187
+ <glyph unicode="&#x2260;" glyph-name="fi-zoom-in" d="M584.875 960c-0.154 0-0.336 0-0.519 0-242.522 0-439.125-196.603-439.125-439.125 0-95.43 30.441-183.75 82.142-255.779l-227.372-225.501 103.595-103.595 226.816 226.816c70.664-50.695 158.892-81.067 254.214-81.067 242.522 0 439.125 196.603 439.125 439.125 0 242.434-196.461 438.983-438.862 439.125zM584.875 228.011c-0.051 0-0.111 0-0.171 0-161.744 0-292.864 131.12-292.864 292.864s131.12 292.864 292.864 292.864c161.744 0 292.864-131.12 292.864-292.864 0-0.060 0-0.12 0-0.18-0.291-161.524-131.161-292.393-292.666-292.684zM772.608 571.563h-136.533v136.533c0 6.221-5.043 11.264-11.264 11.264h-78.677c-0.051 0.001-0.111 0.001-0.171 0.001-6.221 0-11.264-5.043-11.264-11.264 0 0 0-0.001 0-0.001v-136.533h-136.533c-6.221 0-11.264-5.043-11.264-11.264v-78.165c0-6.221 5.043-11.264 11.264-11.264h136.533v-136.533c0 0 0-0.001 0-0.001 0-6.221 5.043-11.264 11.264-11.264 0.060 0 0.12 0 0.18 0.001h78.839c6.221 0 11.264 5.043 11.264 11.264v136.533h136.533c6.221 0 11.264 5.043 11.264 11.264v77.995c0 6.221-5.043 11.264-11.264 11.264z" />
188
+ <glyph unicode="&#x2264;" glyph-name="fi-arrows-in" d="M368.64 44.885l47.957 290.133c0.115 0.746 0.181 1.606 0.181 2.481 0 4.608-1.826 8.789-4.794 11.86l0.005-0.005c-3.066 2.963-7.247 4.789-11.855 4.789-0.875 0-1.736-0.066-2.575-0.193l-288.674-49.311c-7.383-1.988-12.727-8.623-12.727-16.506 0-4.112 1.454-7.884 3.876-10.831l56.467-56.461-151.723-152.235c-2.869-3.046-4.633-7.163-4.633-11.691s1.763-8.644 4.641-11.699l104.44-104.439c3.046-2.869 7.163-4.633 11.691-4.633s8.644 1.763 11.699 4.641l151.543 151.544 57.173-56.32c2.999-2.672 6.975-4.305 11.332-4.305 8.109 0 14.896 5.655 16.635 13.236zM655.36 851.115l-47.957-290.133c-0.115-0.746-0.181-1.606-0.181-2.481 0-4.608 1.826-8.789 4.794-11.86l-0.005 0.005c3.066-2.963 7.247-4.789 11.855-4.789 0.875 0 1.736 0.066 2.575 0.193l288.674 48.799c7.563 1.86 13.084 8.583 13.084 16.595 0 4.306-1.595 8.24-4.226 11.243l-56.474 56.471 151.552 151.552c2.869 3.046 4.633 7.163 4.633 11.691s-1.763 8.644-4.641 11.699l-104.269 105.122c-3.046 2.869-7.163 4.633-11.691 4.633s-8.644-1.763-11.699-4.641l-151.543-151.544-57.173 56.32c-2.999 2.672-6.975 4.305-11.332 4.305-8.109 0-14.896-5.655-16.635-13.236zM915.115 304.64l-290.133 47.957c-0.746 0.115-1.606 0.181-2.481 0.181-4.608 0-8.789-1.826-11.86-4.794l0.005 0.005c-2.963-3.066-4.789-7.247-4.789-11.855 0-0.875 0.066-1.736 0.193-2.575l49.311-288.674c1.814-7.625 8.568-13.209 16.625-13.209 4.372 0 8.361 1.644 11.381 4.348l56.474 56.476 151.552-151.552c3.046-2.869 7.163-4.633 11.691-4.633s8.644 1.763 11.699 4.641l104.439 104.44c2.869 3.046 4.633 7.163 4.633 11.691s-1.763 8.644-4.641 11.699l-151.544 151.543 56.32 57.003c2.672 2.999 4.305 6.975 4.305 11.332 0 8.109-5.655 14.896-13.236 16.635zM108.885 591.36l290.133-47.957c0.746-0.115 1.606-0.181 2.481-0.181 4.608 0 8.789 1.826 11.86 4.794l-0.005-0.005c2.963 3.066 4.789 7.247 4.789 11.855 0 0.875-0.066 1.736-0.193 2.575l-49.311 288.674c-1.988 7.383-8.623 12.727-16.506 12.727-4.112 0-7.884-1.454-10.831-3.876l-57.144-56.467-151.552 151.723c-3.046 2.869-7.163 4.633-11.691 4.633s-8.644-1.763-11.699-4.641l-104.439-104.44c-2.869-3.046-4.633-7.163-4.633-11.691s1.763-8.644 4.641-11.699l151.544-151.543-56.32-57.173c-2.672-2.999-4.305-6.975-4.305-11.332 0-8.109 5.655-14.896 13.236-16.635z" />
189
+ <glyph unicode="&#x2265;" glyph-name="fi-arrows-compress" d="M401.067 54.443l52.224 315.051c0.194 0.966 0.305 2.076 0.305 3.212 0 4.839-2.014 9.207-5.249 12.313l-0.006 0.006c-3.239 3.222-7.705 5.213-12.636 5.213-1.083 0-2.144-0.096-3.174-0.28l-314.089-52.891c-8.563-1.452-15.003-8.814-15.003-17.681 0-4.962 2.016-9.452 5.274-12.697l61.441-61.441-164.864-164.864c-3.118-3.22-5.039-7.615-5.039-12.459s1.922-9.238 5.044-12.463l114.171-114.171c3.247-3.269 7.745-5.292 12.715-5.292s9.468 2.023 12.714 5.291l164.353 165.377 61.44-61.44c3.245-3.259 7.736-5.275 12.698-5.275 8.867 0 16.229 6.44 17.666 14.897zM622.933 841.557l-52.395-315.051c-0.152-0.878-0.239-1.888-0.239-2.919 0-4.919 1.982-9.374 5.19-12.613l-0.001 0.001c3.264-3.216 7.747-5.201 12.694-5.201 1.062 0 2.103 0.092 3.116 0.267l314.26 52.891c8.563 1.452 15.003 8.814 15.003 17.681 0 4.962-2.016 9.452-5.274 12.697l-61.953 61.441 165.035 165.035c3.269 3.247 5.292 7.745 5.292 12.715s-2.023 9.468-5.291 12.714l-113.836 113.494c-3.247 3.269-7.745 5.292-12.715 5.292s-9.468-2.023-12.714-5.291l-164.353-165.377-61.44 61.44c-3.245 3.259-7.736 5.275-12.698 5.275-8.867 0-16.229-6.44-17.666-14.897z" />
190
+ <glyph unicode="&#x25ca;" glyph-name="fi-key" d="M910.165 573.611h-441.344c-44.245 75.622-125.067 125.611-217.564 125.611-138.746 0-251.221-112.476-251.221-251.221s112.476-251.221 251.221-251.221c92.497 0 173.319 49.989 216.922 124.425l48.087 1.186c0.015 0 0.032 0 0.050 0 2.386 0 4.544 0.98 6.093 2.559l88.236 88.919c1.547 1.559 3.69 2.524 6.059 2.524s4.512-0.965 6.058-2.524l62.123-62.123c1.547-1.559 3.69-2.524 6.059-2.524s4.512 0.965 6.058 2.524l39.254 39.254c1.547 1.559 3.69 2.524 6.059 2.524s4.512-0.965 6.058-2.524l45.057-45.398c1.547-1.559 3.69-2.524 6.059-2.524s4.512 0.965 6.058 2.524l44.886 45.057c1.547 1.559 3.69 2.524 6.059 2.524s4.512-0.965 6.058-2.524l36.353-36.353c1.538-1.508 3.647-2.439 5.973-2.439s4.435 0.931 5.975 2.441l110.42 103.593c1.664 1.561 2.701 3.774 2.701 6.229s-1.037 4.668-2.697 6.225l-105.306 101.38c-1.553 1.476-3.657 2.385-5.972 2.389zM136.533 390.827c-31.355 0.29-56.661 25.775-56.661 57.171 0 31.576 25.597 57.173 57.173 57.173s57.172-25.596 57.173-57.171c0-0.001 0-0.002 0-0.002 0-31.576-25.597-57.173-57.173-57.173-0.18 0-0.36 0.001-0.539 0.002z" />
191
+ <glyph unicode="&#xe900;" glyph-name="fi-notification-count" horiz-adv-x="828" d="M827.563 610.645c0-77.008-62.427-139.435-139.435-139.435s-139.435 62.427-139.435 139.435c0 77.008 62.427 139.435 139.435 139.435s139.435-62.427 139.435-139.435zM704.853 383.659v30.208c-5.632 0-11.093 0-17.067 0-107.86 1.799-194.606 89.657-194.606 197.777 0 85.329 54.030 158.038 129.745 185.783-39.084 43.125-92.179 73.465-151.907 85.462l-1.855 21.815c0 30.586-24.795 55.381-55.381 55.381s-55.381-24.795-55.381-55.381v-21.675c-135.291-26.866-235.861-144.617-235.861-285.858 0-0.003 0-0.006 0-0.009v-230.57c0-0.027 0-0.060 0-0.092 0-80.194-38.652-151.36-98.342-195.885l-24.197-17.868v-122.539h292.523c14.321-54.478 63.131-94.007 121.173-94.007s106.853 39.529 120.978 93.135l292.889 0.872v122.539l-23.552 17.067c-62.293 46.080-98.987 119.467-98.987 213.504z" />
192
+ <glyph unicode="&#xe901;" glyph-name="fi-dashboard-settings" horiz-adv-x="1160" d="M522.581 279.040l-65.877 75.605c-5.883 6.757-9.469 15.649-9.469 25.377 0 12.905 6.31 24.336 16.013 31.377l0.112 0.077 328.875 234.837c6.179 4.355 13.863 6.96 22.155 6.96 11.546 0 21.912-5.051 29.010-13.063l14.883-17.107c5.697-6.702 9.162-15.456 9.162-25.019 0-10.108-3.871-19.311-10.211-26.209l0.025 0.028-276.992-294.571c-7.076-7.461-17.061-12.103-28.129-12.103-11.636 0-22.074 5.13-29.176 13.252l-0.039 0.045zM955.733 821.931c-98.42 79.372-225.003 127.407-362.805 127.407-320.472 0-580.267-259.794-580.267-580.267 0-168.145 71.518-319.586 185.794-425.563l0.371-0.34c5.032-4.383 11.653-7.055 18.899-7.055 10.608 0 19.879 5.727 24.889 14.258l0.074 0.136 49.323 85.333c2.31 4.011 3.672 8.821 3.672 13.949 0 7.899-3.233 15.043-8.447 20.181l-0.003 0.003c-75.845 76.975-122.681 182.715-122.681 299.394 0 235.641 191.025 426.667 426.667 426.667 97.952 0 188.194-33.007 260.211-88.506l-0.997 0.739c2.156-1.767 4.941-2.838 7.977-2.838 3.568 0 6.79 1.479 9.087 3.858l0.004 0.004 88.235 94.208c2.417 2.332 3.917 5.599 3.917 9.216s-1.501 6.884-3.913 9.212l-0.004 0.004zM936.96 634.197c-3.125-2.326-5.128-6.009-5.128-10.16 0-2.569 0.767-4.959 2.085-6.954l-0.029 0.047c45.165-66.477 72.109-148.505 72.109-236.827 0-121.799-51.241-231.631-133.342-309.113l-0.207-0.193c-5.218-5.141-8.451-12.285-8.451-20.184 0-5.128 1.362-9.938 3.745-14.087l-0.073 0.138 49.323-85.333c5.045-8.652 14.281-14.375 24.853-14.375 7.306 0 13.974 2.733 19.038 7.232l-0.029-0.026c122.003 106.927 198.616 263.064 198.616 437.095 0 121.548-37.372 234.368-101.252 327.595l1.282-1.981c-2.364 3.025-6.013 4.951-10.111 4.951-3.185 0-6.098-1.163-8.338-3.088l0.017 0.014zM698.368 694.613c0-33.084-26.82-59.904-59.904-59.904s-59.904 26.82-59.904 59.904c0 33.084 26.82 59.904 59.904 59.904s59.904-26.82 59.904-59.904zM450.389 635.563c0-33.084-26.82-59.904-59.904-59.904s-59.904 26.82-59.904 59.904c0 33.084 26.82 59.904 59.904 59.904s59.904-26.82 59.904-59.904zM882.347 166.4c0-33.084-26.82-59.904-59.904-59.904s-59.904 26.82-59.904 59.904c0 33.084 26.82 59.904 59.904 59.904s59.904-26.82 59.904-59.904zM961.707 417.963c0-33.084-26.82-59.904-59.904-59.904s-59.904 26.82-59.904 59.904c0 33.084 26.82 59.904 59.904 59.904s59.904-26.82 59.904-59.904z" />
193
+ <glyph unicode="&#xe902;" glyph-name="fi-update-arrow" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512v0c0 282.77-229.23 512-512 512v0zM512 31.915c-229.798 0-416.085 186.288-416.085 416.085s186.288 416.085 416.085 416.085c229.798 0 416.085-186.288 416.085-416.085v0c0-0.051 0-0.111 0-0.171 0-229.703-186.211-415.915-415.915-415.915-0.060 0-0.12 0-0.18 0h0.009zM759.467 446.464l-38.229 38.229c-2.406 2.393-5.724 3.873-9.387 3.873s-6.98-1.479-9.387-3.873l-150.186-150.186v352.427c0 6.127-4.967 11.093-11.093 11.093h-58.368c-6.127 0-11.093-4.967-11.093-11.093v0-352.427l-150.187 150.187c-2.406 2.393-5.724 3.873-9.387 3.873s-6.98-1.479-9.387-3.873l-38.228-38.228c-2.393-2.406-3.873-5.724-3.873-9.387s1.479-6.98 3.873-9.387l-0.001 0.001 238.251-238.592c2.352-2.374 5.612-3.844 9.216-3.844s6.864 1.47 9.215 3.843l238.252 238.422c2.393 2.406 3.873 5.724 3.873 9.387s-1.479 6.98-3.873 9.387l0.001-0.001z" />
194
+ <glyph unicode="&#xe903;" glyph-name="performance" d="M417.792 403.456c1.004 1.77 1.595 3.888 1.595 6.144 0 6.975-5.654 12.629-12.629 12.629-0.021 0-0.042 0-0.063 0h-143.698c-2.535 0.013-4.584 2.071-4.584 4.608 0 1.352 0.582 2.567 1.509 3.41l0.004 0.003 508.075 460.629c-72.482 41.722-159.387 66.332-252.040 66.332-282.77 0-512-229.23-512-512 0-168.707 81.597-318.357 207.479-411.636l1.383-0.979zM789.675 878.080l-186.88-329.045c-0.991-1.775-1.574-3.894-1.574-6.15 0-7.069 5.731-12.8 12.8-12.8 0.133 0 0.266 0.002 0.399 0.006h143.341c2.531-0.018 4.577-2.074 4.577-4.608 0-1.265-0.51-2.41-1.334-3.243v0l-527.36-503.808c80.343-54.904 179.602-87.673 286.514-87.673 282.77 0 512 229.23 512 512 0 182.975-95.982 343.532-240.344 434.070l-2.138 1.251z" />
195
+ <glyph unicode="&#xe904;" glyph-name="fi-power-on-off" d="M916.651 761.003c-12.235 15.422-30.974 25.224-52.003 25.224-15.397 0-29.566-5.255-40.813-14.069l0.144 0.109c-15.645-12.197-25.611-31.046-25.611-52.223 0-15.306 5.207-29.396 13.945-40.596l-0.11 0.147c49.588-63.037 79.531-143.561 79.531-231.079 0-0.181 0-0.363 0-0.544v0.028c0-209.721-170.012-379.733-379.733-379.733s-379.733 170.012-379.733 379.733v0c-0.001 0.37-0.002 0.807-0.002 1.245 0 87.421 29.877 167.864 79.977 231.675l-0.615-0.813c8.478 10.994 13.589 24.965 13.589 40.129 0 21.067-9.863 39.83-25.223 51.924l-0.141 0.107c-11.057 8.587-25.133 13.767-40.419 13.767-21.171 0-40.022-9.936-52.144-25.398l-0.109-0.144c-66.83-85.078-107.179-193.714-107.179-311.774 0-0.252 0-0.504 0.001-0.756v0.040c0-282.77 229.23-512 512-512s512 229.23 512 512v0c0.002 0.53 0.003 1.158 0.003 1.785 0 117.964-40.283 226.52-107.844 312.661l0.833-1.103zM512 382.123c36.271 0.193 65.61 29.593 65.707 65.868v445.961c0 36.477-29.571 66.048-66.048 66.048s-66.048-29.571-66.048-66.048v0-445.952c0.097-36.404 29.63-65.878 66.048-65.878 0.12 0 0.24 0 0.36 0.001h-0.018z" />
196
+ <glyph unicode="&#xe905;" glyph-name="fi-cloud-migration" d="M877.056 534.699c-9.452 86.149-81.821 152.577-169.705 152.577-20.539 0-40.23-3.628-58.468-10.278l1.186 0.378c-22.632 94.168-106.125 163.063-205.709 163.063-107.089 0-195.57-79.67-209.405-182.972l-0.119-1.083c-130.264-5.014-233.965-111.827-233.965-242.86 0-133.915 108.311-242.532 242.109-243.028h597.38c0.016 0 0.036 0 0.056 0 101.609 0 183.979 82.37 183.979 183.979 0 88.518-62.513 162.435-145.799 180.012l-1.201 0.212zM563.2 507.733c0 0.001 0 0.001 0 0.002 0 4.653 3.724 8.436 8.354 8.531h30.046c4.639-0.096 8.363-3.879 8.363-8.532 0-0.001 0-0.001 0-0.002v0-30.037c0-4.619-3.744-8.363-8.363-8.363h-29.867c-4.619 0-8.363 3.744-8.363 8.363v0zM447.147 324.096c0-4.619-3.744-8.363-8.363-8.363h-30.037c-4.619 0-8.363 3.744-8.363 8.363v0 30.037c0 0.001 0 0.001 0 0.002 0 4.653 3.724 8.436 8.354 8.531h30.046c4.639-0.096 8.363-3.879 8.363-8.532 0-0.001 0-0.001 0-0.002v0zM464.213 477.696c0-4.619-3.744-8.363-8.363-8.363v0h-195.584l72.704-72.533c1.72-1.728 2.783-4.11 2.783-6.741s-1.063-5.013-2.783-6.742v0l-19.627-20.651c-1.728-1.72-4.11-2.783-6.741-2.783s-5.013 1.063-6.742 2.783v0l-122.88 122.88c-1.71 1.7-2.768 4.055-2.768 6.656s1.058 4.956 2.768 6.656v0l122.88 122.88c1.728 1.72 4.11 2.783 6.741 2.783s5.013-1.063 6.742-2.783v0l19.797-19.797c1.72-1.728 2.783-4.11 2.783-6.741s-1.063-5.013-2.783-6.742v0l-72.875-72.192h196.437c4.619 0 8.363-3.744 8.363-8.363v0zM518.827 324.096c0-4.619-3.744-8.363-8.363-8.363v0h-29.184c-4.619 0-8.363 3.744-8.363 8.363v0 30.037c0 0.001 0 0.001 0 0.002 0 4.653 3.724 8.436 8.354 8.531h30.729c4.639-0.096 8.363-3.879 8.363-8.532 0-0.001 0-0.001 0-0.002v0zM535.893 477.696c0-4.619-3.744-8.363-8.363-8.363v0h-28.331c-4.619 0-8.363 3.744-8.363 8.363v0 30.037c0 0.001 0 0.001 0 0.002 0 4.653 3.724 8.436 8.354 8.531h29.876c4.639-0.096 8.363-3.879 8.363-8.532 0-0.001 0-0.001 0-0.002v0zM831.829 332.459l-121.173-123.392c-1.728-1.72-4.11-2.783-6.741-2.783s-5.013 1.063-6.742 2.783v0l-19.797 19.797c-1.72 1.728-2.783 4.11-2.783 6.741s1.063 5.013 2.783 6.742v0l73.557 73.387h-197.12c-4.619 0-8.363 3.744-8.363 8.363v0 30.037c0 4.619 3.744 8.363 8.363 8.363v0h197.12l-72.875 72.875c-1.72 1.728-2.783 4.11-2.783 6.741s1.063 5.013 2.783 6.742v0l19.797 19.797c1.728 1.72 4.11 2.783 6.741 2.783s5.013-1.063 6.742-2.783v0l122.88-122.88c1.71-1.7 2.768-4.055 2.768-6.656s-1.058-4.956-2.768-6.656v0z" />
197
+ <glyph unicode="&#xe906;" glyph-name="shipper-anchor" d="M999.595 431.957l-231.595-90.624 75.264-57.856c-40.448-87.723-120.32-185.856-277.163-204.8v405.845h87.552c32.896 0 59.563 26.667 59.563 59.563v0 37.717c0 6.881-5.578 12.459-12.459 12.459h-133.973v83.968c54.046 22.297 91.392 74.577 91.392 135.579 0 80.778-65.483 146.261-146.261 146.261s-146.261-65.483-146.261-146.261c0-61.002 37.345-113.282 90.421-135.224l0.971-0.356v-83.968h-133.803c-6.881 0-12.459-5.578-12.459-12.459v0-37.717c0-32.896 26.667-59.563 59.563-59.563v0h86.869v-405.504c-125.867 11.186-230.756 90.764-278.041 200.922l-0.829 2.171 77.653 59.221-231.595 90.624 9.728-260.437 61.44 47.104c69.568-136.502 204.284-231.011 362.051-242.771l1.469-0.088c1.783-5.006 4.522-9.283 8.023-12.801l-0.001 0.001 19.797-17.067c6.359-6.346 15.137-10.269 24.832-10.269s18.473 3.924 24.833 10.27l-0.001-0.001 19.797 17.067c3.472 3.534 6.205 7.805 7.943 12.556l0.078 0.244c159.506 11.114 294.419 106.399 361.525 241.346l1.142 2.537 62.805-48.128zM512 868.523c30.256 0 54.784-24.528 54.784-54.784s-24.528-54.784-54.784-54.784c-30.256 0-54.784 24.528-54.784 54.784v0c0 30.256 24.528 54.784 54.784 54.784v0z" />
198
+ <glyph unicode="&#xe907;" glyph-name="forminator-2" horiz-adv-x="1025" d="M976.896 662.699l-436.224-436.565c-4.134-4.113-9.834-6.655-16.128-6.655s-11.994 2.542-16.129 6.656l-53.93 53.93c-4.113 4.134-6.655 9.834-6.655 16.128s2.542 11.994 6.656 16.129l-0.001-0.001 456.192 456.704c-94.399 116.371-237.39 190.138-397.611 190.138-282.11 0-510.805-228.695-510.805-510.805s228.695-510.805 510.805-510.805c282.11 0 510.805 228.695 510.805 510.805 0 77.77-17.38 151.48-48.467 217.459l1.32-3.117zM139.605 348.331c-2.325 0.030-4.551 0.402-6.647 1.068l0.162-0.044c-8.027 2.344-14.11 8.824-15.845 16.919l-0.027 0.148c-5.407 24.515-8.514 52.679-8.533 81.565v0.014c0.291 221.574 179.833 401.117 401.38 401.408h31.772l-93.184-94.208c-2.826-2.847-6.412-4.937-10.427-5.941l-0.154-0.033c-137.039-33.188-237.23-154.794-237.23-299.801 0-0.501 0.001-1.002 0.004-1.502v0.077c0.070-12.104 0.874-23.948 2.37-35.574l-0.151 1.441c0.104-0.817 0.164-1.763 0.164-2.722 0-6.268-2.541-11.943-6.649-16.051v0l-40.789-40.107c-4.134-4.113-9.835-6.656-16.129-6.656-0.030 0-0.059 0-0.089 0h0.005zM347.819 176.128c-1.304-5.253-5.153-9.384-10.13-11.061l-0.11-0.032-146.432-47.787c-0.744-0.129-1.601-0.203-2.475-0.203s-1.731 0.074-2.564 0.216l0.090-0.013c-8.559 0.025-15.487 6.969-15.487 15.531 0 1.771 0.296 3.473 0.842 5.059l-0.033-0.109 47.787 146.432c2.091 6.273 7.909 10.716 14.766 10.716 4.3 0 8.192-1.748 11.005-4.572l98.646-98.646c2.797-2.782 4.528-6.634 4.528-10.89 0-1.284-0.157-2.53-0.454-3.722l0.022 0.106zM350.891 394.411c-0.046 0-0.1-0.001-0.155-0.001-6.272 0-11.95 2.544-16.058 6.656v0l-53.931 53.931c-4.113 4.134-6.655 9.834-6.655 16.128s2.542 11.994 6.656 16.129l353.62 353.279c4.134 4.113 9.834 6.655 16.128 6.655s11.994-2.542 16.129-6.656l53.93-53.93c4.113-4.134 6.655-9.834 6.655-16.128s-2.542-11.994-6.656-16.129l0.001 0.001-353.451-354.304c-4.134-4.113-9.835-6.656-16.129-6.656-0.030 0-0.059 0-0.089 0h0.005zM510.123 46.592c-33.752 0.022-66.521 4.19-97.837 12.022l2.776-0.588c-10.167 2.469-17.598 11.493-17.598 22.253 0 6.388 2.619 12.165 6.842 16.314l0.003 0.003 39.424 39.595c4.152 4.070 9.845 6.582 16.124 6.582 1.236 0 2.45-0.097 3.633-0.285l-0.131 0.017c13.975-2.343 30.106-3.706 46.546-3.755h0.046c0.021 0 0.047 0 0.073 0 151.844 0 278.070 109.679 303.78 254.135l0.275 1.865c0.779 4.768 2.98 8.922 6.146 12.119l88.403 88.403 1.365-19.115c0-9.045 1.365-18.091 1.365-27.136 0-0.152 0-0.332 0-0.513 0-221.734-179.557-401.531-401.2-401.919h-0.037z" />
199
+ <glyph unicode="&#xe908;" glyph-name="forminator" horiz-adv-x="1157" d="M780.459 878.763l-68.267 68.267c-5.283 5.29-12.585 8.562-20.651 8.562s-15.368-3.272-20.65-8.562v0l-451.243-450.219c-5.28-5.255-8.548-12.529-8.548-20.565s3.268-15.31 8.547-20.564l68.268-68.268c5.274-5.239 12.542-8.477 20.565-8.477s15.291 3.238 20.567 8.479l-0.002-0.002 451.413 450.048c5.239 5.274 8.477 12.542 8.477 20.565s-3.238 15.291-8.479 20.567l0.002-0.002zM1148.757 804.523l-68.267 68.267c-5.274 5.239-12.542 8.477-20.565 8.477s-15.291-3.238-20.567-8.479l-597.331-597.331c-5.29-5.283-8.562-12.585-8.562-20.651s3.272-15.368 8.562-20.65v0l68.267-68.267c5.274-5.239 12.542-8.477 20.565-8.477s15.291 3.238 20.567 8.479l597.331 597.331c5.239 5.274 8.477 12.542 8.477 20.565s-3.238 15.291-8.479 20.567l0.002-0.002zM174.080 245.76c-3.561 3.609-8.506 5.844-13.973 5.844-1.643 0-3.239-0.202-4.764-0.582l0.135 0.029c-6.795-1.619-12.148-6.576-14.295-13.002l-0.041-0.14-60.928-186.88c-0.62-1.835-0.978-3.948-0.978-6.144 0-10.917 8.837-19.771 19.748-19.797h0.003c2.205 0.028 4.314 0.401 6.288 1.066l-0.144-0.042 186.709 60.928c8.039 2.641 13.741 10.079 13.741 18.848 0 5.513-2.253 10.499-5.889 14.088l-0.002 0.002zM119.467 404.992c-1.221 11.263-1.918 24.326-1.918 37.553 0 1.918 0.015 3.833 0.044 5.744l-0.003-0.289c-0.001 0.376-0.002 0.821-0.002 1.267 0 184.823 127.735 339.811 299.741 381.501l2.683 0.549c5.364 1.279 9.99 3.91 13.658 7.513l119.463 119.463-22.357 0.853h-7.168c-3.755 0-7.68 0-11.605 0 0 0 0 0-0.001 0-282.47 0-511.513-228.744-511.999-511.1v-0.047c0.085-36.919 4.122-72.848 11.708-107.447l-0.615 3.341c2.19-10.527 9.918-18.823 19.936-21.794l0.203-0.052c2.696-0.908 5.801-1.432 9.028-1.432 7.74 0 14.777 3.013 20 7.931l-0.015-0.014 51.2 51.2c5.206 5.243 8.424 12.466 8.424 20.441 0 1.702-0.146 3.369-0.428 4.99l0.025-0.173zM1020.587 507.051l-112.64-112.64c-4.106-4.022-6.976-9.291-7.997-15.193l-0.024-0.167c-33.583-186.114-194.329-325.461-387.621-325.461-0.107 0-0.213 0-0.32 0h0.016c-20.957 0.064-41.459 1.8-61.442 5.079l2.22-0.301c-1.324 0.212-2.85 0.332-4.405 0.332-8.069 0-15.379-3.256-20.685-8.526l-51.198-51.198c-5.25-5.302-8.494-12.598-8.494-20.653 0-13.714 9.404-25.231 22.116-28.455l0.203-0.044c36.541-9.321 78.489-14.671 121.686-14.671 282.77 0 512 229.23 512 512 0 0.298 0 0.596-0.001 0.893v-0.047c0 11.605 0 23.211-1.707 34.133z" />
200
+ <glyph unicode="&#xe909;" glyph-name="fi-open-new-window" d="M887.467 960h-273.067v-136.533h176.469l-534.869-534.357c-0.603-0.615-0.976-1.459-0.976-2.389s0.372-1.774 0.976-2.39l92.33-92.33c0.615-0.603 1.459-0.976 2.389-0.976s1.774 0.372 2.39 0.976l534.356 534.868v-176.469h136.533v409.6zM887.467 106.667c0-18.851-15.282-34.133-34.133-34.133v0h-682.667c-18.851 0-34.133 15.282-34.133 34.133v0 682.667c0 18.851 15.282 34.133 34.133 34.133v0h221.867v136.533h-256c-75.405 0-136.533-61.128-136.533-136.533v0-750.933c0-75.405 61.128-136.533 136.533-136.533v0h750.933c75.405 0 136.533 61.128 136.533 136.533v0 256h-136.533z" />
201
+ <glyph unicode="&#xe90a;" glyph-name="fi-plug-disconnected" d="M609.963 390.827c-3.917 3.892-9.315 6.297-15.275 6.297s-11.358-2.405-15.276-6.298l0.001 0.001-130.048-130.56-125.099 125.099 130.048 130.048c3.892 3.917 6.297 9.315 6.297 15.275s-2.405 11.358-6.298 15.276l-30.548 30.548c-3.917 3.892-9.315 6.297-15.275 6.297s-11.358-2.405-15.276-6.298l-130.047-130.047-32.597 32.597c-3.101 3.17-7.422 5.135-12.203 5.135s-9.101-1.965-12.2-5.132l-83.63-83.63c-37.202-37.444-60.196-89.045-60.196-146.015 0-45.244 14.502-87.1 39.111-121.175l-0.419 0.609-82.091-82.091c-11.749-11.749-19.016-27.981-19.016-45.909 0-35.857 29.068-64.926 64.926-64.926 17.929 0 34.16 7.267 45.909 19.016l82.091 82.091c33.426-24.103 75.209-38.549 120.366-38.549 57.155 0 108.904 23.143 146.389 60.568l-0.003-0.003 83.456 83.627c3.17 3.101 5.135 7.422 5.135 12.203s-1.965 9.101-5.132 12.2l-32.6 32.6 130.048 130.048c3.892 3.917 6.297 9.315 6.297 15.275s-2.405 11.358-6.298 15.276l0.001-0.001zM1005.056 941.056c-11.741 11.767-27.975 19.046-45.909 19.046s-34.168-7.28-45.908-19.045l-84.481-84.481c-33.426 24.103-75.209 38.549-120.366 38.549-57.155 0-108.904-23.143-146.389-60.568l0.003 0.003-84.139-83.627c-3.17-3.101-5.135-7.422-5.135-12.203s1.965-9.101 5.132-12.2l312.664-312.664c3.101-3.17 7.422-5.135 12.203-5.135s9.101 1.965 12.2 5.132l83.63 83.63c37.423 37.482 60.565 89.231 60.565 146.386 0 45.157-14.446 86.94-38.97 120.98l0.42-0.613 84.48 84.48c11.767 11.741 19.046 27.975 19.046 45.909s-7.28 34.168-19.045 45.908l-0.001 0.001z" />
202
+ <glyph unicode="&#xe90b;" glyph-name="fi-plug-connected" d="M354.645 573.269c-2.821 2.878-6.749 4.661-11.093 4.661s-8.272-1.784-11.091-4.659l-0.002-0.003-119.467-119.467c-33.906-33.962-54.873-80.85-54.873-132.635 0-40.902 13.080-78.749 35.286-109.586l-0.381 0.556-175.957-175.787c-10.657-10.657-17.249-25.38-17.249-41.643 0-32.525 26.367-58.892 58.892-58.892 16.262 0 30.985 6.592 41.643 17.249v0l175.787 176.128c30.28-21.825 68.127-34.905 109.029-34.905 51.785 0 98.673 20.967 132.637 54.876l119.465 119.465c2.836 2.84 4.59 6.762 4.59 11.093s-1.754 8.253-4.59 11.094v0zM1006.933 942.933c-10.629 10.65-25.324 17.239-41.557 17.239s-30.929-6.589-41.556-17.238l-176.129-175.958c-30.26 21.781-68.071 34.834-108.93 34.834-51.75 0-98.609-20.939-132.568-54.806l-119.463-119.463c-2.836-2.84-4.59-6.762-4.59-11.093s1.754-8.253 4.59-11.094v0l282.624-282.624c2.821-2.878 6.749-4.661 11.093-4.661s8.272 1.784 11.091 4.659l0.002 0.003 119.467 119.467c33.906 33.962 54.873 80.85 54.873 132.635 0 40.902-13.080 78.749-35.286 109.586l0.381-0.556 175.957 175.787c10.701 10.637 17.325 25.366 17.325 41.643s-6.623 31.006-17.322 41.64l-0.003 0.003z" />
203
+ <glyph unicode="&#xe90c;" glyph-name="fi-buddypress" d="M468.992 961.195c-241.049-21.549-433.031-206.468-465.279-442.254l-0.299-2.674c-2.19-20.167-3.439-43.559-3.439-67.243s1.249-47.075 3.685-70.113l-0.246 2.87c34.369-252.374 248.499-444.79 507.57-444.79 145.040 0 275.995 60.309 369.154 157.219l0.162 0.169c74.298 76.085 124.975 175.535 139.996 286.311l0.292 2.628c2.184 20.015 3.43 43.227 3.43 66.731s-1.246 46.717-3.675 69.576l0.245-2.845c-31.561 228.221-208.931 407.041-433.748 440.488l-2.817 0.344c-25.771 2.572-55.7 4.039-85.973 4.039-10.158 0-20.276-0.165-30.354-0.493l1.468 0.038zM574.123 872.107c207.247-31.525 364.213-208.467 364.213-422.071 0-105.118-38.014-201.358-101.045-275.722l0.512 0.62c-69.239-80.962-167.093-135.696-277.728-148.463l-1.995-0.187c-13.792-1.086-29.864-1.704-46.080-1.704s-32.288 0.619-48.193 1.834l2.113-0.13c-28.733 3.469-54.52 8.918-79.435 16.385l3.318-0.854c-177.474 54.354-304.303 216.738-304.303 408.744 0 25.141 2.174 49.774 6.346 73.721l-0.368-2.55c7.401 43.678 20.661 82.826 39.128 118.863l-1.070-2.298c50.933 102.145 138.79 179.508 245.665 215.529l2.997 0.876c30.589 10.51 66.11 17.964 102.907 20.893l1.541 0.099c6.077 0.215 13.218 0.337 20.388 0.337 24.99 0 49.633-1.487 73.844-4.376l-2.926 0.284zM617.813 751.275c46.512-9.953 83.486-43.082 98.701-86.446l0.286-0.935c3.609-9.716 5.697-20.94 5.697-32.652 0-1.241-0.023-2.477-0.070-3.707l0.005 0.177c0.328-3.077 0.515-6.647 0.515-10.261 0-9.090-1.184-17.903-3.407-26.293l0.161 0.714c-10.099-40.75-38.168-73.417-75.101-89.611l-0.846-0.331c-6.339-3.3-13.718-5.648-21.524-6.623l-0.321-0.033s2.389 5.632 5.461 11.776c10.777 20.814 17.096 45.436 17.096 71.534 0 69.751-45.139 128.959-107.799 150.008l-1.116 0.325-11.435 3.755c-3.413 1.195 12.459 9.045 28.501 14.336 12.012 3.985 25.84 6.284 40.205 6.284 8.779 0 17.357-0.859 25.655-2.496l-0.836 0.138zM518.315 704.512c49.603-13.281 87.206-53.394 96.639-103.454l0.129-0.823c0.928-6.459 1.458-13.917 1.458-21.499 0-13.637-1.714-26.874-4.939-39.507l0.239 1.102c-11.086-37.018-37.261-66.486-71.203-81.761l-0.818-0.329c-14.843-7.252-32.297-11.493-50.742-11.493-1.302 0-2.598 0.021-3.889 0.063l0.188-0.005c-0.325-0.003-0.709-0.005-1.093-0.005-57.927 0-106.939 38.174-123.249 90.739l-0.244 0.914c-3.436 9.037-5.425 19.487-5.425 30.401 0 2.575 0.111 5.125 0.328 7.644l-0.023-0.328c-0.178 2.289-0.279 4.957-0.279 7.648 0 10.036 1.411 19.742 4.045 28.931l-0.181-0.74c14.327 49.128 54.827 86.038 105.007 94.943l0.807 0.119c5.364 0.556 11.59 0.873 17.891 0.873 12.51 0 24.727-1.25 36.535-3.631l-1.177 0.198zM721.92 482.133c48.981-15.36 78.848-52.907 91.989-115.541 3.382-19.092 5.316-41.073 5.316-63.505 0-1.554-0.009-3.107-0.028-4.657l0.002 0.236c-1.024-2.219-4.949-2.56-29.696-2.56-1.907-0.060-4.149-0.093-6.399-0.093-7.784 0-15.474 0.406-23.048 1.198l0.946-0.080c-2.199 19.373-5.618 36.748-10.296 53.599l0.568-2.399c-16.043 54.272-51.2 95.232-92.331 107.52-3.925 1.195-6.997 2.731-6.997 3.413 3.645 5.498 7.521 10.296 11.799 14.701l-0.023-0.024 11.776 13.312 17.067-1.024c10.502-0.154 20.59-1.64 30.194-4.294l-0.839 0.198zM444.757 398.507l41.984-41.472 62.635 61.269 32.597 32.085 12.288-1.536c34.458-4.418 64.828-19.264 88.507-41.224l-0.102 0.093c27.282-26.415 45.617-61.926 50.105-101.633l0.071-0.767c1.569-13.736 2.463-29.655 2.463-45.782 0-9.893-0.337-19.707-0.999-29.432l0.072 1.315-0.512-5.291h-247.296c-174.763 0-247.637 0-247.637 1.877-1.571 11.944-2.467 25.756-2.467 39.778 0 9.367 0.4 18.641 1.184 27.805l-0.082-1.193c9.557 91.307 59.221 145.749 140.971 154.453 15.701 1.536 8.875 6.656 66.219-50.005z" />
204
+ <glyph unicode="&#xe90d;" glyph-name="fi-blog" d="M0 960v-136.533h68.267s0 85.333 85.333 85.333v-324.267s0-17.067-34.133-17.067h-17.067v-51.2h221.867v51.2h-17.067c-34.133 0-34.133 17.067-34.133 17.067v324.267c85.333 0 85.333-85.333 85.333-85.333h68.267v136.533zM989.867 806.4h-443.733c-18.851 0-34.133 15.282-34.133 34.133v0 85.333c0 18.851 15.282 34.133 34.133 34.133v0h443.733c18.851 0 34.133-15.282 34.133-34.133v0-85.333c0-18.851-15.282-34.133-34.133-34.133v0zM989.867-64h-955.733c-18.851 0-34.133 15.282-34.133 34.133v0 85.333c0 18.851 15.282 34.133 34.133 34.133v0h955.733c18.851 0 34.133-15.282 34.133-34.133v0-85.333c0-18.851-15.282-34.133-34.133-34.133v0zM989.867 226.133h-955.733c-18.851 0-34.133 15.282-34.133 34.133v0 85.333c0 18.851 15.282 34.133 34.133 34.133v0h955.733c18.851 0 34.133-15.282 34.133-34.133v0-85.333c0-18.851-15.282-34.133-34.133-34.133v0zM989.867 516.267h-443.733c-18.851 0-34.133 15.282-34.133 34.133v0 85.333c0 18.851 15.282 34.133 34.133 34.133v0h443.733c18.851 0 34.133-15.282 34.133-34.133v0-85.333c0-18.851-15.282-34.133-34.133-34.133v0z" />
205
+ <glyph unicode="&#xe90e;" glyph-name="fi-jobs-pros-search" d="M1024 39.595l-226.816 226.816c50.818 70.758 81.267 159.126 81.267 254.605 0 242.711-196.756 439.467-439.467 439.467s-439.467-196.756-439.467-439.467c0-242.711 196.756-439.467 439.467-439.467 95.479 0 183.847 30.449 255.922 82.165l-1.317-0.899 226.987-226.816zM146.432 520.704c0 0.051 0 0.111 0 0.171 0 161.744 131.12 292.864 292.864 292.864s292.864-131.12 292.864-292.864c0-161.744-131.12-292.864-292.864-292.864v0c-161.606 0.194-292.573 131.101-292.864 292.665v0.028zM439.296 770.389l56.832-175.275h184.32l-148.992-108.373 56.832-175.275-148.992 108.373-149.163-108.373 57.003 175.275-149.163 108.373h184.32l57.003 175.275z" />
206
+ <glyph unicode="&#xe90f;" glyph-name="fi-security-thumb-print" horiz-adv-x="780" d="M415.744 604.16c-0.077 14.363-11.738 25.977-26.112 25.977-0.48 0-0.958-0.013-1.432-0.039l0.066 0.003c-13.875-1.418-24.608-13.042-24.608-27.173 0-0.467 0.012-0.932 0.035-1.393l-0.003 0.065c0-164.864-108.715-309.589-269.824-390.315-8.414-4.358-14.065-12.998-14.065-22.959 0-3.216 0.589-6.294 1.665-9.133l-0.059 0.177c3.808-9.777 13.147-16.579 24.076-16.579 4.228 0 8.218 1.018 11.739 2.823l-0.145-0.068c179.029 89.941 298.667 252.928 298.667 438.613zM466.603 617.643c-1.831 10.356-5.469 19.595-10.6 27.803l0.19-0.326c3.763-7.655 7.305-16.771 10.090-26.211l0.32-1.267zM516.949 631.979c-2.969 13.47-7.62 25.386-13.817 36.31l0.334-0.64c4.903-9.958 9.492-21.794 13.079-34.057l0.404-1.612zM198.827 560.299c2.901 159.915 93.867 243.541 182.272 243.541 119.467 0 199.68-104.619 199.68-260.437 0-74.069 47.957-130.56 113.323-173.739 3.992-2.697 8.913-4.305 14.209-4.305 13.612 0 24.742 10.623 25.553 24.031l0.003 0.071c0.102 0.856 0.16 1.846 0.16 2.851 0 9.043-4.721 16.984-11.832 21.493l-0.104 0.062c-59.392 38.741-89.429 82.261-89.429 130.048 0.171 183.467-103.595 311.979-251.563 311.979-113.664 0-230.741-100.693-234.325-294.571-1.365-70.485-48.811-118.101-110.933-150.357q1.707-27.989 4.949-55.637c85.504 39.253 156.16 102.571 158.037 204.971zM319.488-28.16c-5.425-2.551-9.113-7.971-9.113-14.252 0-7.67 5.5-14.055 12.77-15.428l0.098-0.015c18.437-3.908 39.621-6.146 61.328-6.146 0.34 0 0.679 0.001 1.018 0.002h-0.053c0.205 0 0.447-0.001 0.689-0.001 16.803 0 33.301 1.303 49.399 3.815l-1.789-0.23c7.646 1.142 13.445 7.663 13.445 15.538 0 5.696-3.033 10.683-7.572 13.436l-0.070 0.039c-16.603 10.871-36.612 17.916-58.147 19.434l-0.391 0.022c-22.645-0.953-43.71-6.839-62.431-16.603l0.82 0.389zM516.949 631.979c-3.99 13.875-8.579 25.711-14.077 37.024l0.594-1.354c-25.6 53.419-68.437 84.139-122.368 84.139-83.115 0-128.341-96.768-130.219-192.341-0.198-12.223-1.183-24.032-2.911-35.599l0.18 1.466c-10.581-72.363-54.443-155.819-181.077-215.040-8.772-4.187-14.725-12.986-14.725-23.176 0-1.886 0.204-3.725 0.591-5.495l-0.031 0.169c2.837-11.382 12.97-19.682 25.041-19.682 4.117 0 8.009 0.965 11.461 2.682l-0.15-0.067c149.675 69.12 196.949 171.861 209.579 249.344 7.814 26.154 12.467 56.244 12.798 87.371l0.002 0.181c-0.002 0.231-0.004 0.505-0.004 0.779 0 42.827 33.635 77.798 75.93 79.939l0.191 0.008c0.508 0.012 1.108 0.019 1.708 0.019 43.185 0 78.225-34.868 78.505-77.987v-0.027c0-205.995-131.584-386.56-327.339-485.035-8.572-4.353-14.343-13.105-14.343-23.204 0-5.2 1.53-10.043 4.164-14.102l-0.061 0.101c4.702-7.358 12.827-12.166 22.076-12.166 4.406 0 8.558 1.091 12.199 3.019l-0.142-0.068c51.585 25.953 96.037 55.134 136.735 88.704l-1.225-0.981c12.8 10.581 25.088 21.675 36.864 32.939 17.524 16.635 33.864 33.948 49.217 52.12l0.788 0.957c39.718 46.847 72.543 101.171 95.914 160.264l1.366 3.917c4.267 10.923 8.021 22.016 11.605 33.109 15.56 48.061 24.545 103.36 24.576 160.753v0.015c-0.188 9.777-1.421 19.169-3.594 28.196l0.181-0.89zM585.728 323.072c-14.432 17.043-35.845 27.79-59.767 27.79-43.17 0-78.165-34.996-78.165-78.165 0-22.010 9.097-41.896 23.737-56.102l0.020-0.019c43.885-46.683 96.344-84.723 154.946-111.705l3.091-1.276c3.382-1.714 7.375-2.719 11.601-2.719 10.188 0 19.014 5.835 23.317 14.345l0.068 0.149c1.489 3.183 2.358 6.912 2.358 10.843 0 10.113-5.75 18.884-14.158 23.221l-0.146 0.069c-55.524 25.208-102.804 59.050-142.349 100.357l-0.158 0.166c-4.739 4.804-7.665 11.407-7.665 18.693 0 5.791 1.849 11.151 4.989 15.52l-0.054-0.079c4.807 6.492 12.44 10.655 21.045 10.655 7.513 0 14.284-3.173 19.048-8.251l0.013-0.014c35.292-35.938 76.812-65.613 122.837-87.302l2.603-1.103c3.354-1.696 7.311-2.689 11.5-2.689 12.131 0 22.317 8.327 25.155 19.576l0.038 0.179c0.571 2.038 0.9 4.378 0.9 6.795 0 10.077-5.708 18.82-14.067 23.174l-0.145 0.069c-42.862 20.078-79.464 46.2-110.544 77.775l-0.048 0.049zM381.099 40.107c42.155 0 88.235-24.747 131.072-58.368 4.34-3.439 9.895-5.517 15.935-5.517 5.104 0 9.861 1.484 13.864 4.043l-0.103-0.062c7.269 4.717 12.011 12.793 12.011 21.977 0 8.3-3.872 15.695-9.908 20.478l-0.054 0.041c-58.368 46.080-113.152 69.291-163.328 69.291-58.197 0-115.712-26.624-165.547-60.587-6.584-4.695-10.826-12.305-10.826-20.907s4.242-16.212 10.748-20.854l0.078-0.053c4.133-2.944 9.284-4.707 14.848-4.707s10.715 1.763 14.927 4.761l-0.079-0.054c42.667 28.331 90.112 50.517 136.363 50.517zM76.629 509.099c10.953 14.723 17.68 33.162 18.089 53.152l0.002 0.096c1.877 98.645 31.061 184.32 85.333 247.808 47.949 58.992 119.9 96.872 200.751 98.64l0.294 0.005c175.957 0 303.787-153.6 303.787-364.544-0.065-0.97-0.103-2.102-0.103-3.243s0.037-2.273 0.111-3.395l-0.008 0.153c2.863-10.836 12.578-18.695 24.128-18.695 13.133 0 23.894 10.161 24.848 23.050l0.005 0.082c0 6.997 0 13.483-1.195 18.773-4.623 72.966-20.376 140.955-45.602 204.137l1.57-4.457c-58.539 121.685-169.643 199.339-305.323 199.339h-20.309c-90.348-7.036-169.309-50.635-222.961-115.842l-0.441-0.553c-61.44-72.704-94.891-169.643-96.939-280.405 0-7.168-7.339-32.939-7.509-39.083-0.021-0.37-0.033-0.803-0.033-1.239 0-12.725 10.315-23.040 23.040-23.040 7.531 0 14.219 3.614 18.423 9.202l0.042 0.059zM702.123 274.432c-4.306 0.025-8.357 1.095-11.918 2.969l0.142-0.068c-67.619 36.118-123.472 86.075-165.393 146.437l-1.007 1.531c-1.874 3.511-2.975 7.679-2.975 12.104 0 14.421 11.691 26.112 26.112 26.112 8.417 0 15.904-3.982 20.679-10.166l0.045-0.061c38.014-53.976 86.969-97.693 143.885-128.61l2.206-1.096c8.47-4.433 14.151-13.159 14.151-23.211 0-14.356-11.585-26.006-25.917-26.111h-0.010zM597.333 31.403c-6.623 0.175-12.599 2.806-17.081 7.010l0.014-0.013c-120.491 104.789-217.429 90.112-221.867 89.429-0.706-0.068-1.526-0.106-2.354-0.106-14.421 0-26.112 11.691-26.112 26.112 0 11.98 8.068 22.076 19.067 25.151l0.184 0.044c4.949 0.853 124.075 20.821 264.704-101.376 5.462-4.81 8.89-11.818 8.89-19.627 0-14.366-11.602-26.023-25.948-26.111h-0.008z" />
207
+ <glyph unicode="&#xe910;" glyph-name="fi-IP" d="M664.576 643.413h-110.933v-184.32h108.032c2.047-0.14 4.436-0.22 6.844-0.22 25.202 0 48.357 8.768 66.579 23.421l-0.206-0.161c15.674 14.977 25.419 36.045 25.419 59.39 0 1.802-0.058 3.591-0.172 5.364l0.012-0.242c0.059 1.269 0.093 2.757 0.093 4.252 0 25.31-9.7 48.355-25.585 65.619l0.062-0.069c-17.146 17.018-40.764 27.535-66.839 27.535-1.162 0-2.32-0.021-3.472-0.062l0.167 0.005zM1020.416 515.072c-31.614 228.102-208.881 406.818-433.575 440.316l-2.82 0.345c-27.424 2.91-59.243 4.57-91.45 4.57-8.291 0-16.557-0.11-24.795-0.329l1.216 0.026c-241.077-21.486-433.094-206.439-465.281-442.26l-0.298-2.668c-2.194-20.167-3.445-43.559-3.445-67.243s1.251-47.074 3.692-70.111l-0.246 2.868c35.44-252.308 249.87-444.331 509.149-444.331 51.501 0 101.233 7.576 148.142 21.675l-3.638-0.939c192.476 58.672 335.236 221.894 363.209 421.903l0.311 2.716c2.192 20.015 3.442 43.227 3.442 66.731s-1.25 46.716-3.688 69.573l0.246-2.842zM341.333 340.821v-181.248c-0.029-3.466-2.845-6.264-6.314-6.264-1.816 0-3.453 0.767-4.605 1.994l-45.571 45.571c-0.978 1.189-2.449 1.942-4.096 1.942s-3.118-0.753-4.089-1.933l-0.007-0.009-45.909-45.909c-1.102-1.056-2.6-1.707-4.25-1.707-0.006 0-0.012 0-0.018 0h0.001c-3.487 0-6.315 2.827-6.315 6.315v0 581.803h121.173zM822.613 410.795q-59.051-49.835-163.499-49.835h-105.472v-206.848h-121.003v587.264h229.035c1.662 0.037 3.62 0.059 5.583 0.059 40.198 0 78.304-8.954 112.433-24.977l-1.621 0.684c32.283-15.11 58.544-38.519 76.705-67.519l0.437-0.748c17.066-28.105 27.167-62.079 27.167-98.412 0-1.222-0.011-2.442-0.034-3.658l0.003 0.183c0.127-2.447 0.199-5.313 0.199-8.195 0-51.284-22.895-97.221-59.020-128.147l-0.229-0.192z" />
208
+ <glyph unicode="&#xe911;" glyph-name="fi-timed-countdown" d="M822.101 832c-8.906 5.673-19.761 9.042-31.403 9.042-32.613 0-59.051-26.438-59.051-59.051 0-0.059 0-0.118 0-0.177v0.009c0.14-20.151 10.622-37.824 26.397-47.991l0.227-0.137c89.977-58.93 148.588-159.269 148.588-273.297 0-179.842-145.79-325.632-325.632-325.632-167.9 0-306.121 127.072-323.736 290.29l-0.126 1.439 41.301-41.301c9.373-10.039 22.685-16.296 37.458-16.296 28.277 0 51.2 22.923 51.2 51.2 0 14.774-6.257 28.086-16.266 37.431l-0.030 0.027-141.824 141.824c-9.263 9.252-22.054 14.974-36.181 14.974s-26.918-5.722-36.182-14.974l-141.823-141.823c-8.514-9.118-13.742-21.401-13.742-34.904 0-28.277 22.923-51.2 51.2-51.2 13.503 0 25.786 5.227 34.934 13.769l-0.030-0.027 51.2 51.2c12.809-234.197 205.837-419.252 442.087-419.252 244.502 0 442.709 198.208 442.709 442.709 0 155.076-79.735 291.529-200.444 370.599l-1.686 1.037zM445.44 263.168c15.615 0.138 29.682 6.648 39.751 17.051l160.612 160.612v381.269c0 31.010-25.139 56.149-56.149 56.149s-56.149-25.139-56.149-56.149v-335.36l-127.659-127.659c-10.198-10.167-16.508-24.229-16.508-39.765 0-31.010 25.139-56.149 56.149-56.149 0.044 0 0.087 0 0.131 0h-0.007z" />
209
+ <glyph unicode="&#xe912;" glyph-name="2FA" d="M221.867 460.459l-126.976 127.829 49.152 49.152 78.507-78.507 204.8 204.8 49.323-49.323zM292.352 960l-292.352-133.632v-193.707c0-38.741 13.483-259.413 292.352-372.395 278.869 112.299 292.352 333.141 292.352 371.883v194.219zM731.648 635.733l-80.384-36.693c-16.553-141.030-94.408-261.063-205.783-334.281l-1.747-1.079c12.8-80.384 66.731-238.933 288.597-327.68 278.187 112.299 291.669 333.141 291.669 371.883v193.536zM661.675 135.68l-127.659 127.659 49.323 49.323 78.507-78.507 204.8 204.8 49.323-49.323z" />
210
+ <glyph unicode="&#xe913;" glyph-name="fi-lightbulb-line" horiz-adv-x="693" d="M346.453 874.667c0.074 0 0.161 0 0.249 0 144.024 0 260.779-116.755 260.779-260.779 0-77.848-34.112-147.73-88.203-195.512l-0.28-0.243c-34.22-30.067-55.765-73.851-55.979-122.672v-0.038h-233.301c-0.209 48.912-21.752 92.751-55.797 122.723l-0.182 0.157c-54.306 48.021-88.372 117.86-88.372 195.657 0 133.307 100.025 243.252 229.118 258.876l1.249 0.123c9.148 1.087 19.743 1.707 30.483 1.707 0.083 0 0.167 0 0.25 0h-0.013zM346.453 960c-0.072 0-0.156 0-0.241 0-14.106 0-28.023-0.806-41.708-2.375l1.672 0.156c-173.289-20.605-306.381-166.672-306.381-343.824 0-103.33 45.28-196.083 117.081-259.502l0.372-0.322c16.59-14.358 27.086-35.371 27.306-58.842v-44.070c0-0.051 0-0.111 0-0.171 0-23.127 18.7-41.887 41.804-41.984h320.18c23.187 0 41.984 18.797 41.984 41.984v0 44.203c0.203 23.426 10.635 44.375 27.040 58.628l0.096 0.082c72.241 63.745 117.569 156.542 117.569 259.926 0 191.152-154.96 346.112-346.112 346.112-0.233 0-0.466 0-0.698-0.001h0.036zM530.432 74.581h-367.957c-9.991 0-18.091 8.099-18.091 18.091v0 39.424c0 9.991 8.099 18.091 18.091 18.091h367.957c9.991 0 18.091-8.099 18.091-18.091v0-39.424c0-9.991-8.099-18.091-18.091-18.091v0zM465.579-64h-238.933c-9.991 0-18.091 8.099-18.091 18.091v0 39.253c0 9.991 8.099 18.091 18.091 18.091h238.933c9.991 0 18.091-8.099 18.091-18.091v0-39.424c-0.097-9.918-8.159-17.92-18.090-17.92 0 0-0.001 0-0.001 0v0z" />
211
+ <glyph unicode="&#xe914;" glyph-name="fi-accounts-billing" d="M887.467 857.6c18.851 0 34.133-15.282 34.133-34.133v0-750.933c0-18.851-15.282-34.133-34.133-34.133v0h-750.933c-18.851 0-34.133 15.282-34.133 34.133v0 750.933c0 18.851 15.282 34.133 34.133 34.133v0h750.933zM887.467 960h-750.933c-75.405 0-136.533-61.128-136.533-136.533v0-750.933c0-75.405 61.128-136.533 136.533-136.533v0h750.933c75.405 0 136.533 61.128 136.533 136.533v0 750.933c0 75.405-61.128 136.533-136.533 136.533v0zM546.133 686.933h273.067v-68.267h-273.067v68.267zM546.133 550.4h273.067v-68.267h-273.067v68.267zM546.133 413.867h273.067v-68.267h-273.067v68.267zM648.533 277.333h170.667v-68.267h-170.667v68.267zM469.163 394.752v0c-6.070 13.397-14.419 24.751-24.662 34.058l-0.084 0.075c-10.841 9.728-23.196 18.101-36.597 24.668l-0.95 0.42c-13.995 6.827-29.867 13.653-47.104 20.139-10.795 3.745-19.757 7.606-28.391 12.017l1.255-0.582c-6.523 3.078-12.14 6.784-17.152 11.166l0.085-0.073c-3.299 2.953-5.91 6.604-7.609 10.727l-0.071 0.195c-1.518 4.090-2.396 8.815-2.396 13.746 0 0.268 0.003 0.535 0.008 0.801l-0.001-0.040c-0.003 0.2-0.005 0.436-0.005 0.672 0 5.255 0.876 10.306 2.491 15.013l-0.097-0.325c1.527 4.41 3.921 8.178 6.998 11.265l-0.001-0.001c3.375 3.307 7.486 5.877 12.062 7.442l0.226 0.067c5.39 1.85 11.601 2.918 18.060 2.918 0.491 0 0.98-0.006 1.468-0.018l-0.072 0.001c0.645 0.038 1.399 0.060 2.158 0.060 11.455 0 21.753-4.949 28.874-12.826l0.030-0.034c7.463-9.919 11.952-22.444 11.952-36.017 0-1.619-0.064-3.224-0.189-4.811l0.013 0.21v-8.704h88.405v8.704c0.008 0.569 0.012 1.242 0.012 1.915 0 16.58-2.69 32.532-7.657 47.443l0.306-1.059c-4.984 14.706-12.244 27.416-21.481 38.41l0.148-0.18c-9.409 10.83-20.741 19.708-33.506 26.166l-0.627 0.288c-10.459 5.418-22.591 9.626-35.368 11.992l-0.813 0.125v56.149h-57.515v-55.296c-13.746-1.918-26.171-5.443-37.819-10.433l0.955 0.364c-13.229-5.818-24.539-13.574-34.146-23.052l0.012 0.012c-9.597-9.452-17.286-20.811-22.457-33.465l-0.241-0.668c-5.316-13.097-8.401-28.29-8.401-44.203s3.085-31.106 8.689-45.012l-0.288 0.81c6.151-13.391 14.551-24.741 24.83-34.055l0.088-0.078c10.83-9.504 23.192-17.661 36.583-23.996l0.963-0.41c12.317-6.145 27.925-12.769 43.929-18.568l3.345-1.059c10.416-3.532 19.045-7.167 27.37-11.32l-1.258 0.568c6.152-2.975 11.439-6.625 16.080-10.957l-0.037 0.035c3.41-3.291 6.13-7.271 7.939-11.718l0.082-0.228c1.628-4.394 2.57-9.469 2.57-14.764 0-0.33-0.004-0.658-0.011-0.986l0.001 0.049c0.008-0.273 0.012-0.594 0.012-0.917 0-9.965-4.27-18.932-11.080-25.172l-0.025-0.023c-8.528-6.586-19.369-10.556-31.136-10.556-1.355 0-2.698 0.053-4.026 0.156l0.176-0.011c-7.080 0.076-13.883 1.13-20.322 3.035l0.525-0.133c-6.203 1.724-11.579 4.667-16.094 8.577l0.052-0.044c-4.991 4.614-8.895 10.329-11.334 16.764l-0.101 0.303c-2.939 7.338-4.644 15.844-4.644 24.749 0 0.78 0.013 1.556 0.039 2.329l-0.003-0.112v8.704h-87.381v-8.704c-0.034-1.148-0.053-2.499-0.053-3.854 0-18.784 3.719-36.7 10.461-53.050l-0.338 0.926c6.427-15.207 15.558-28.114 26.899-38.68l0.067-0.062c10.835-9.886 23.653-17.819 37.761-23.115l0.81-0.267c10.356-3.957 22.498-7.117 35.074-8.934l0.937-0.111v-51.2h57.515v51.2c13.944 1.895 26.55 5.301 38.44 10.108l-1.064-0.38c13.734 5.467 25.514 13.027 35.563 22.417l-0.064-0.059c9.812 9.38 17.628 20.756 22.808 33.487l0.232 0.646c5.077 12.414 8.024 26.821 8.024 41.916 0 0.264-0.001 0.528-0.003 0.792v-0.041c0.014 0.665 0.022 1.449 0.022 2.234 0 15.644-3.209 30.539-9.004 44.063l0.278-0.729z" />
212
+ <glyph unicode="&#xe915;" glyph-name="fi-tech-support" d="M1024 362.667v170.667l-117.931 26.624c-9.668 33.722-22.168 63.058-37.746 90.414l1.053-2.008 64.512 102.4-119.467 119.467-102.4-64.512c-25.349 14.534-54.685 27.035-85.534 35.98l-2.872 0.713-26.283 117.589h-170.667l-26.112-117.931c-33.72-9.658-63.056-22.159-90.408-37.744l2.003 1.051-102.4 64.512-119.467-119.467 64.512-102.4c-14.525-25.347-27.026-54.683-35.978-85.528l-0.715-2.878-118.101-26.283v-170.667l117.931-26.624c5.127-17.879 10.358-32.504 16.369-46.72l-1.009 2.688 81.067 81.067c-6.075 22.879-9.564 49.146-9.564 76.227 0 170.416 138.149 308.565 308.565 308.565s308.565-138.149 308.565-308.565c0-170.416-138.149-308.565-308.565-308.565-26.915 0-53.026 3.446-77.915 9.921l2.145-0.474-81.067-81.067c11.562-5.025 26.188-10.257 41.175-14.643l2.857-0.717 26.112-117.76h170.667l26.624 117.931c33.722 9.668 63.058 22.168 90.414 37.746l-2.008-1.053 102.4-64.512 119.467 119.467-64.512 102.4c14.518 25.345 27.018 54.68 35.976 85.522l0.717 2.883zM676.523 492.885l-59.051-59.051c-12.339-12.268-29.348-19.851-48.128-19.851s-35.789 7.583-48.131 19.855l-23.378 23.378c-12.268 12.339-19.851 29.348-19.851 48.128s7.583 35.789 19.855 48.131l59.048 59.048c-13.353 3.921-28.694 6.176-44.561 6.176-24.158 0-47.095-5.229-67.741-14.616l1.027 0.418c-34.455-15.502-62.226-40.745-80.448-72.207l-0.448-0.838c-14.639-23.889-23.309-52.81-23.309-83.756 0-13.769 1.716-27.138 4.947-39.903l-0.24 1.12-303.445-303.445c-16.226-16.226-26.262-38.642-26.262-63.403 0-49.521 40.144-89.665 89.665-89.665 24.76 0 47.177 10.036 63.403 26.262l303.275 303.275c11.585-2.959 24.885-4.657 38.582-4.657 31.029 0 60.021 8.716 84.663 23.834l-0.706-0.403c32.301 18.67 57.543 46.441 72.601 79.797l0.444 1.099c8.969 19.618 14.198 42.555 14.198 66.714 0 15.867-2.256 31.208-6.464 45.719l0.287-1.157zM102.4 4.267c-18.851 0-34.133 15.282-34.133 34.133s15.282 34.133 34.133 34.133c18.851 0 34.133-15.282 34.133-34.133v0c0-18.851-15.282-34.133-34.133-34.133v0z" />
213
+ <glyph unicode="&#xe916;" glyph-name="fi-arrow-skip-back" horiz-adv-x="973" d="M469.163 38.4c-5.459-5.045-11.769-9.279-18.669-12.446l-0.445-0.183c-6.878-3.128-14.917-4.951-23.381-4.951s-16.503 1.823-23.744 5.098l0.363-0.147c-7.395 3.402-13.754 7.631-19.351 12.688l0.066-0.059-366.933 367.104c-5.495 5.378-9.891 11.855-12.835 19.078l-0.136 0.378c-2.595 6.654-4.099 14.357-4.099 22.412 0 0.221 0.001 0.442 0.003 0.662v-0.034c0 0.092-0.001 0.2-0.001 0.308 0 8.443 1.694 16.491 4.76 23.822l-0.151-0.408c2.823 7.964 7.069 14.793 12.483 20.506l-0.024-0.026 367.787 365.397c10.998 10.865 26.121 17.576 42.811 17.576 8.382 0 16.369-1.693 23.637-4.755l-0.401 0.15c7.449-3.171 13.8-7.552 19.106-12.961l0.009-0.009 41.984-43.008c10.865-10.998 17.576-26.121 17.576-42.811 0-8.382-1.693-16.369-4.755-23.637l0.15 0.401c-3.171-7.449-7.552-13.8-12.961-19.106l-0.009-0.009-279.040-281.429 279.040-280.576c5.419-5.315 9.8-11.665 12.826-18.734l0.145-0.38c2.915-6.785 4.609-14.682 4.609-22.975 0-0.143-0.001-0.286-0.002-0.428v0.022c0-0.093 0.001-0.202 0.001-0.312 0-8.501-1.693-16.606-4.761-23.997l0.153 0.415c-3.002-7.398-7.409-13.668-12.933-18.739l-0.037-0.034-41.984-43.861zM911.872 38.4c-5.532-4.998-11.891-9.227-18.819-12.435l-0.467-0.194c-6.786-3.127-14.724-4.95-23.088-4.95-0.103 0-0.206 0-0.309 0.001h0.016c-0.055 0-0.12 0-0.184 0-8.401 0-16.377 1.823-23.553 5.095l0.356-0.145c-7.32 3.449-13.618 7.672-19.183 12.69l0.069-0.061-365.909 367.104c-5.495 5.378-9.891 11.855-12.835 19.078l-0.136 0.378c-2.915 7.017-4.608 15.168-4.608 23.713 0 0.063 0 0.126 0 0.19v-0.010c0 0.092-0.001 0.2-0.001 0.308 0 8.443 1.694 16.491 4.76 23.822l-0.151-0.408c3.079 7.66 7.475 14.193 12.965 19.621l0.005 0.005 366.763 365.397c5.34 5.379 11.683 9.753 18.726 12.82l0.389 0.151c6.456 2.612 13.944 4.127 21.786 4.127 0.681 0 1.359-0.011 2.035-0.034l-0.098 0.003c0.275 0.005 0.599 0.007 0.924 0.007 16.262 0 31.002-6.517 41.751-17.082l-0.009 0.008 42.667-43.008c10.865-10.998 17.576-26.121 17.576-42.811 0-8.382-1.693-16.369-4.755-23.637l0.15 0.401c-3.171-7.449-7.552-13.8-12.961-19.106l-0.009-0.009-280.235-281.429 280.235-280.576c5.419-5.315 9.8-11.665 12.826-18.734l0.145-0.38c2.606-6.45 4.118-13.929 4.118-21.762 0-0.569-0.008-1.137-0.024-1.702l0.002 0.083c0-0.093 0.001-0.202 0.001-0.312 0-8.501-1.693-16.606-4.761-23.997l0.153 0.415c-3.002-7.398-7.409-13.668-12.933-18.739l-0.037-0.034-42.496-43.861z" />
214
+ <glyph unicode="&#xe917;" glyph-name="fi-arrow-skip-forward" horiz-adv-x="973" d="M503.637 38.4c5.459-5.045 11.769-9.279 18.669-12.446l0.445-0.183c6.878-3.128 14.917-4.951 23.381-4.951s16.503 1.823 23.744 5.098l-0.363-0.147c7.395 3.402 13.754 7.631 19.351 12.688l-0.066-0.059 366.933 367.104c5.495 5.378 9.891 11.855 12.835 19.078l0.136 0.378c2.595 6.654 4.099 14.357 4.099 22.412 0 0.221-0.001 0.442-0.003 0.662v-0.034c0 0.092 0.001 0.2 0.001 0.308 0 8.443-1.694 16.491-4.76 23.822l0.151-0.408c-2.823 7.964-7.069 14.793-12.483 20.506l0.024-0.026-367.787 365.397c-10.998 10.865-26.121 17.576-42.811 17.576-8.382 0-16.369-1.693-23.637-4.755l0.401 0.15c-7.449-3.171-13.8-7.552-19.106-12.961l-0.009-0.009-41.984-43.008c-10.865-10.998-17.576-26.121-17.576-42.811 0-8.382 1.693-16.369 4.755-23.637l-0.15 0.401c3.171-7.449 7.552-13.8 12.961-19.106l0.009-0.009 279.040-281.429-279.040-280.576c-5.419-5.315-9.8-11.665-12.826-18.734l-0.145-0.38c-2.915-6.785-4.609-14.682-4.609-22.975 0-0.143 0.001-0.286 0.002-0.428v0.022c0-0.093-0.001-0.202-0.001-0.312 0-8.501 1.693-16.606 4.761-23.997l-0.153 0.415c3.002-7.398 7.409-13.668 12.933-18.739l0.037-0.034 41.984-43.861zM60.928 38.4c5.532-4.998 11.891-9.227 18.819-12.435l0.467-0.194c6.479-2.817 14.025-4.455 21.955-4.455 0.502 0 1.002 0.007 1.5 0.020l-0.074-0.002c0.055 0 0.12 0 0.184 0 8.401 0 16.377 1.823 23.553 5.095l-0.356-0.145c7.315 3.294 13.614 7.353 19.212 12.2l-0.097-0.082 365.909 367.104c5.495 5.378 9.891 11.855 12.835 19.078l0.136 0.378c2.915 7.017 4.608 15.168 4.608 23.713 0 0.063 0 0.126 0 0.19v-0.010c0 0.092 0.001 0.2 0.001 0.308 0 8.443-1.694 16.491-4.76 23.822l0.151-0.408c-3.079 7.66-7.475 14.193-12.965 19.621l-0.005 0.005-366.763 365.397c-5.34 5.379-11.683 9.753-18.726 12.82l-0.389 0.151c-6.456 2.612-13.944 4.127-21.786 4.127-0.681 0-1.359-0.011-2.035-0.034l0.098 0.003c-0.275 0.005-0.599 0.007-0.924 0.007-16.262 0-31.002-6.517-41.751-17.082l0.009 0.008-42.667-43.008c-10.865-10.998-17.576-26.121-17.576-42.811 0-8.382 1.693-16.369 4.755-23.637l-0.15 0.401c3.171-7.449 7.552-13.8 12.961-19.106l0.009-0.009 280.235-281.429-280.235-280.576c-5.419-5.315-9.8-11.665-12.826-18.734l-0.145-0.38c-2.606-6.45-4.118-13.929-4.118-21.762 0-0.569 0.008-1.137 0.024-1.702l-0.002 0.083c0-0.093-0.001-0.202-0.001-0.312 0-8.501 1.693-16.606 4.761-23.997l-0.153 0.415c2.854-7.368 7.093-13.636 12.44-18.756l0.019-0.018 43.008-43.861z" />
215
+ <glyph unicode="&#xe918;" glyph-name="fi-arrow-skip-start" horiz-adv-x="786" d="M725.333 38.4c-5.532-4.998-11.891-9.227-18.819-12.435l-0.467-0.194c-6.878-3.128-14.917-4.951-23.381-4.951s-16.503 1.823-23.744 5.098l0.363-0.147c-7.332 3.4-13.636 7.628-19.173 12.682l0.058-0.052-367.104 367.104c-5.495 5.378-9.891 11.855-12.835 19.078l-0.136 0.378c-2.595 6.654-4.099 14.357-4.099 22.412 0 0.221 0.001 0.442 0.003 0.662v-0.034c0 0.092-0.001 0.2-0.001 0.308 0 8.443 1.694 16.491 4.76 23.822l-0.151-0.408c2.823 7.964 7.069 14.793 12.483 20.506l-0.024-0.026 367.957 365.397c5.29 5.458 11.648 9.846 18.742 12.831l0.373 0.139c6.906 2.989 14.947 4.728 23.395 4.728 16.663 0 31.745-6.765 42.652-17.697l0.001-0.001 41.813-43.008c10.865-10.998 17.576-26.121 17.576-42.811 0-8.382-1.693-16.369-4.755-23.637l0.15 0.401c-3.171-7.449-7.552-13.8-12.961-19.106l-0.009-0.009-279.040-281.429 279.040-280.576c5.419-5.315 9.8-11.665 12.826-18.734l0.145-0.38c2.915-6.785 4.609-14.682 4.609-22.975 0-0.143-0.001-0.286-0.002-0.428v0.022c0-0.093 0.001-0.202 0.001-0.312 0-8.501-1.693-16.606-4.761-23.997l0.153 0.415c-3.002-7.398-7.409-13.668-12.933-18.739l-0.037-0.034-41.813-43.861zM136.533 38.4h-102.4c-18.851 0-34.133 15.282-34.133 34.133v0 750.933c0 18.851 15.282 34.133 34.133 34.133v0h102.4c18.851 0 34.133-15.282 34.133-34.133v0-750.933c0-18.851-15.282-34.133-34.133-34.133v0z" />
216
+ <glyph unicode="&#xe919;" glyph-name="fi-arrow-skip-end" horiz-adv-x="786" d="M60.928 38.4c5.532-4.998 11.891-9.227 18.819-12.435l0.467-0.194c6.479-2.817 14.025-4.455 21.955-4.455 0.502 0 1.002 0.007 1.5 0.020l-0.074-0.002c0.055 0 0.12 0 0.184 0 8.401 0 16.377 1.823 23.553 5.095l-0.356-0.145c7.315 3.294 13.614 7.353 19.212 12.2l-0.097-0.082 365.909 366.933c5.459 5.456 9.849 11.982 12.829 19.236l0.142 0.391c2.915 6.976 4.609 15.081 4.609 23.582 0 0.11 0 0.219-0.001 0.329v-0.017c0 0.092 0.001 0.2 0.001 0.308 0 8.443-1.694 16.491-4.76 23.822l0.151-0.408c-3.079 7.66-7.475 14.193-12.965 19.621l-0.005 0.005-366.763 365.397c-5.34 5.379-11.683 9.753-18.726 12.82l-0.389 0.151c-6.456 2.612-13.944 4.127-21.786 4.127-0.681 0-1.359-0.011-2.035-0.034l0.098 0.003c-0.275 0.005-0.599 0.007-0.924 0.007-16.262 0-31.002-6.517-41.751-17.082l0.009 0.008-42.667-43.008c-5.185-5.414-9.393-11.813-12.311-18.881l-0.148-0.405c-3.113-6.998-4.925-15.163-4.925-23.751 0-16.439 6.641-31.328 17.386-42.128l-0.003 0.003 280.235-281.429-280.235-280.576c-5.419-5.315-9.8-11.665-12.826-18.734l-0.145-0.38c-2.605-6.478-4.115-13.989-4.115-21.853 0-0.538 0.007-1.074 0.021-1.608l-0.002 0.079c0-0.093-0.001-0.202-0.001-0.312 0-8.501 1.693-16.606 4.761-23.997l-0.153 0.415c2.791-7.392 7.040-13.672 12.434-18.75l0.025-0.023 43.008-43.861zM649.728 38.4h102.4c18.851 0 34.133 15.282 34.133 34.133v0 750.933c0 18.851-15.282 34.133-34.133 34.133v0h-102.4c-18.851 0-34.133-15.282-34.133-34.133v0-750.933c0-18.851 15.282-34.133 34.133-34.133v0z" />
217
+ <glyph unicode="&#xe93b;" glyph-name="fi-download" d="M960.171 428.032h-227.328c-0.006 0-0.013 0-0.020 0-28.238 0-52.193-18.336-60.608-43.752-22.516-68.773-85.704-117.249-160.215-117.249s-137.699 48.476-159.747 115.61c-8.882 27.055-32.837 45.391-61.075 45.391-0.007 0-0.014 0-0.022 0h-227.327c0 0 0 0 0 0-35.252 0-63.829-28.577-63.829-63.829 0-0.060 0-0.12 0-0.18v-364.193c0-35.252 28.577-63.829 63.829-63.829h896.341c35.252 0 63.829 28.577 63.829 63.829v364.203c0 35.252-28.577 63.829-63.829 63.829zM498.517 393.899c3.133-4.361 8.19-7.168 13.903-7.168 0.032 0 0.064 0 0.097 0h-0.005c0.027 0 0.059 0 0.092 0 5.713 0 10.77 2.807 13.868 7.117l176.675 248.542c2.213 2.85 3.548 6.478 3.548 10.417 0 9.426-7.641 17.067-17.067 17.067-0.167 0-0.334-0.002-0.501-0.007l-83.090 0.001v222.891c0 9.426-7.641 17.067-17.067 17.067h-153.6c-9.426 0-17.067-7.641-17.067-17.067v-222.891h-83.456c-0.064 0.001-0.14 0.001-0.216 0.001-9.426 0-17.067-7.641-17.067-17.067 0-3.787 1.234-7.286 3.321-10.118z" />
218
+ <glyph unicode="&#xe93f;" glyph-name="fi-first-aid" d="M249.003 658.432h78.336v65.707h366.763v-67.072h78.336v115.2c-0.192 17.325-14.234 31.308-31.564 31.403h-460.809c-17.193-0.285-31.043-14.196-31.232-31.385s0-1.042 0-1.725zM190.464-64h642.901v652.629h-642.901zM317.781 308.053c0.182 5.298 4.43 9.546 9.711 9.728h130.406v130.219c0 5.373 4.355 9.728 9.728 9.728h91.477c0 0 0.001 0 0.001 0 5.373 0 9.728-4.355 9.728-9.728 0-0.060-0.001-0.12-0.002-0.18v-130.38h130.901c5.373 0 9.728-4.355 9.728-9.728v-91.477c0-5.373-4.355-9.728-9.728-9.728h-130.731v-130.56c0-5.373-4.355-9.728-9.728-9.728h-91.477c-5.373 0-9.728 4.355-9.728 9.728v130.901h-130.56c-5.373 0-9.728 4.355-9.728 9.728zM51.2 588.629c-28.277 0-51.2-22.923-51.2-51.2s0-1.365 0-2.048v-546.987s0-1.195 0-1.195c0-28.277 22.923-51.2 51.2-51.2h75.776v652.629zM1024-12.8v550.741c0 28.277-22.923 51.2-51.2 51.2h-75.947v-653.141h75.947c28.277 0 51.2 22.923 51.2 51.2v0z" />
219
+ <glyph unicode="&#xe96a;" glyph-name="fi-sheild-badge" horiz-adv-x="915" d="M808.789 663.211c0 88.917 85.333 153.6 85.333 153.6l-88.064 102.4c-37.364-26.176-83.769-41.829-133.83-41.829-0.95 0-1.899 0.006-2.847 0.017-165.573-0.855-211.824 82.601-211.824 82.601s-46.421-83.456-211.627-83.456c-0.803-0.010-1.753-0.016-2.703-0.016-50.061 0-96.466 15.653-134.588 42.331l-87.306-102.902s85.333-64.512 85.333-153.6-106.667-134.485-106.667-295.083 72.704-275.115 288.597-294.741c83.456-9.045 168.789-136.533 168.789-136.533s85.333 128 168.789 136.533c216.064 19.115 288.768 133.461 288.768 294.059s-106.155 207.019-106.155 295.936zM561.664 454.144l64.341-197.973-168.448 122.368-168.448-122.368 64.341 197.973-168.448 122.368h207.531l64.341 197.973 64.341-197.973h208.213z" />
220
+ <glyph unicode="&#xe96b;" glyph-name="fi-coffee-cup" d="M56.832 49.835h967.168s0-113.835-113.835-113.835h-739.499c-113.835 0-113.835 113.835-113.835 113.835zM853.333 732.501h-568.832c-56.832 0-56.832-60.928-56.832-60.928v-10.411c-16.939 6.366-36.514 10.109-56.946 10.24-94.314 0-170.724-76.41-170.724-170.666s76.41-170.667 170.667-170.667c20.458 0.234 39.959 4.031 58.009 10.798l-1.177-124.632c0-56.832 56.832-52.736 56.832-52.736h57.003v-56.832h455.168v56.832h56.832s56.832-4.096 56.832 52.736v455.168s0 60.928-56.832 60.928zM170.667 443.904c-31.387 0-56.832 25.445-56.832 56.832s25.445 56.832 56.832 56.832c31.327 0 56.735-25.347 56.832-56.652v-0.009c0 0 0 0 0 0 0-31.422-25.424-56.905-56.823-57.002z" />
221
+ <glyph unicode="&#xe96c;" glyph-name="fi-skull" d="M1001.131 155.136c-13.961 14.125-33.335 22.873-54.753 22.873-20.032 0-38.278-7.653-51.971-20.194l-118.044 118.153c32.021 48.523 51.082 108.051 51.082 172.032s-19.061 123.509-51.815 173.216l118.152 116.917c13.202-10.772 30.238-17.297 48.798-17.297 42.792 0 77.483 34.69 77.483 77.483 0 19.455-7.17 37.235-19.012 50.842-13.648 13.555-32.571 21.992-53.464 21.992-4.538 0-8.983-0.398-13.303-1.161 1.346 4.432 1.855 9.45 1.855 14.586 0 20.982-8.489 39.981-22.221 53.749-14.144 14.644-33.956 23.737-55.892 23.737-42.896 0-77.67-34.774-77.67-77.67 0-20.96 8.302-39.981 21.798-53.953l-118.123-118.079c-48.523 32.021-108.051 51.082-172.032 51.082s-123.509-19.061-173.216-51.815l-116.917 118.152c10.772 13.202 17.297 30.238 17.297 48.798 0 42.792-34.69 77.483-77.483 77.483-19.455 0-37.235-7.17-50.842-19.012-13.643-13.663-22.138-32.644-22.138-53.61 0-4.486 0.389-8.881 1.135-13.154-4.431 1.343-9.448 1.852-14.585 1.852-20.982 0-39.981-8.489-53.749-22.221-14.629-14.151-23.711-33.961-23.711-55.892 0-42.929 34.8-77.729 77.729-77.729 20.997 0 40.050 8.326 54.037 21.856l118.080-118.122c-32.021-48.523-51.082-108.051-51.082-172.032s19.061-123.509 51.815-173.216l-118.152-116.917c-13.202 10.772-30.238 17.297-48.798 17.297-42.792 0-77.483-34.69-77.483-77.483 0-19.455 7.17-37.235 19.012-50.842 13.648-13.555 32.571-21.992 53.464-21.992 4.538 0 8.983 0.398 13.303 1.161-1.346-4.432-1.855-9.45-1.855-14.586 0-20.982 8.489-39.981 22.221-53.749 14.144-14.644 33.956-23.737 55.892-23.737 42.896 0 77.67 34.774 77.67 77.67 0 20.96-8.302 39.981-21.798 53.953l114.539 114.495v-77.995c47.44-39.038 108.807-62.708 175.701-62.708s128.261 23.67 176.181 63.091l-0.48 77.612 114.347-113.835c-12.229-13.641-19.707-31.761-19.707-51.628 0-42.792 34.69-77.483 77.483-77.483 20.929 0 39.919 8.298 53.861 21.782 13.628 13.707 22.065 32.63 22.065 53.523 0 4.538-0.398 8.983-1.161 13.303 4.449-1.355 9.486-1.869 14.642-1.869 20.967 0 39.949 8.496 53.691 22.233 13.938 13.93 22.56 33.18 22.56 54.442s-8.622 40.512-22.56 54.442zM426.667 330.069c-33.273 0-60.245 26.973-60.245 60.245s26.973 60.245 60.245 60.245c33.273 0 60.245-26.973 60.245-60.245s-26.973-60.245-60.245-60.245zM597.333 328.533c-33.273 0-60.245 26.973-60.245 60.245s26.973 60.245 60.245 60.245c33.273 0 60.245-26.973 60.245-60.245s-26.973-60.245-60.245-60.245z" />
222
+ <glyph unicode="&#xe97d;" glyph-name="fi-ticket" d="M1018.709 615.595h-1.024l-125.269 125.952c-9.815-6.689-21.933-10.681-34.984-10.681-34.592 0-62.635 28.042-62.635 62.635 0 13.094 4.018 25.25 10.888 35.301l-126.262 125.907c-3.275 3.279-7.8 5.307-12.8 5.307s-9.525-2.028-12.8-5.306l-648.534-648.534c-3.279-3.275-5.307-7.8-5.307-12.8s2.028-9.525 5.306-12.8l126.294-126.123c9.77 6.603 21.813 10.541 34.776 10.541 34.592 0 62.635-28.042 62.635-62.635 0-12.963-3.938-25.006-10.682-34.998l124.728-124.194 1.536-1.707c3.275-3.279 7.8-5.307 12.8-5.307s9.525 2.028 12.8 5.306v0l648.533 648.533c3.279 3.275 5.307 7.8 5.307 12.8s-2.028 9.525-5.306 12.8zM858.624 572.928l-471.552-471.552c-3.275-3.279-7.8-5.307-12.8-5.307s-9.525 2.028-12.8 5.306l-196.096 196.267c-3.279 3.275-5.307 7.8-5.307 12.8s2.028 9.525 5.306 12.8l471.552 471.382c3.275 3.279 7.8 5.307 12.8 5.307s9.525-2.028 12.8-5.306l196.267-196.267c3.228-3.266 5.222-7.757 5.222-12.715s-1.994-9.449-5.223-12.716zM634.027 432.469l-69.803 34.133 8.533 73.045c0.009 0.116 0.014 0.251 0.014 0.388 0 2.922-2.369 5.291-5.291 5.291-1.391 0-2.657-0.537-3.602-1.415l-51.879-52.904-68.267 32.597c-0.639 0.295-1.386 0.467-2.174 0.467-2.922 0-5.291-2.369-5.291-5.291 0-0.788 0.172-1.535 0.481-2.207l32.584-68.234-52.565-51.541c-0.875-0.941-1.412-2.207-1.412-3.598 0-2.922 2.369-5.291 5.291-5.291 0.137 0 0.272 0.005 0.406 0.015l73.028 8.532 34.133-69.803c0.876-1.784 2.679-2.99 4.764-2.99 2.469 0 4.542 1.691 5.126 3.977l19.123 76.666 76.629 19.115c0.942 0.243 1.751 0.719 2.389 1.365 0.954 0.931 1.546 2.23 1.546 3.666 0 2.091-1.253 3.889-3.049 4.684z" />
223
+ <glyph unicode="&#xe986;" glyph-name="fi-stopwatch" horiz-adv-x="1116" d="M1094.656 829.44l-108.203 109.056c-13.429 16.024-33.451 26.14-55.836 26.14-40.153 0-72.704-32.551-72.704-72.704 0-22.385 10.117-42.407 26.027-55.744l108.316-109.319c13.136-13.032 31.227-21.086 51.2-21.086s38.064 8.054 51.205 21.091c12.987 13.149 21.012 31.235 21.012 51.195s-8.025 38.046-21.024 51.207zM130.56 938.496l-109.056-108.203c-10.494-12.516-16.868-28.795-16.868-46.564 0-40.153 32.551-72.704 72.704-72.704 17.768 0 34.048 6.374 46.677 16.96l109.114 108.281c16.024 13.429 26.14 33.451 26.14 55.836 0 40.153-32.551 72.704-72.704 72.704-22.385 0-42.407-10.117-55.744-26.027zM555.691 721.067c0.101 0 0.222 0 0.342 0 179.088 0 324.267-145.179 324.267-324.267s-145.179-324.267-324.267-324.267c-179.088 0-324.267 145.179-324.267 324.267 0 89.671 36.398 170.84 95.225 229.541 58.194 58.516 138.753 94.727 227.769 94.727 0.327 0 0.654 0 0.981-0.001zM555.691 859.648c-255.077-0.225-461.77-207.057-461.77-462.165 0-255.247 206.918-462.165 462.165-462.165s462.165 206.918 462.165 462.165c0 127.891-51.947 243.65-135.892 327.327-83.437 83.623-198.788 135.351-326.22 135.351-0.158 0-0.315 0-0.472 0zM692.053 430.933v2.901c-1.529 5.5-3.042 9.928-4.767 14.248 0.33 0.941-0.694 2.819-1.548 4.525v0c-14.626 32.964-40.422 58.761-72.483 73.028l-0.904 0.359h-1.707v136.533h-107.691v-136.533h-1.024c-17.925-7.295-33.239-17.516-46.093-30.221-25.198-25.421-40.777-60.439-40.777-99.096 0-0.137 0-0.274 0.001-0.411v0.021s0 0 0-0.853c0.040-7.079 0.597-13.995 1.635-20.751l-0.099 0.783c1.777-12.311 4.879-23.408 9.215-33.864l-34.473-33.208-13.995-13.995 74.752-74.752 48.128 48.128 2.389-1.195h1.195c15.185-6.054 32.782-9.564 51.2-9.564s36.015 3.511 52.16 9.899l1.77-0.335c51.588 21.774 87.207 71.794 87.552 130.175-0.067 12.202-1.682 23.952-4.657 35.149zM593.067 360.619c-9.604-9.596-22.867-15.531-37.516-15.531-29.314 0-53.077 23.764-53.077 53.077s23.764 53.077 53.077 53.077c14.649 0 27.912-5.935 37.516-15.531 9.655-9.587 15.632-22.869 15.632-37.546s-5.977-27.959-15.629-37.544z" />
224
+ <glyph unicode="&#xe9ae;" glyph-name="fi-audio-sound" d="M722.091 929.451h-5.291c-0.2 0.002-0.437 0.003-0.674 0.003-19.274 0-36.936-6.901-50.651-18.366l-282.499-235.589c-15.693-13.166-36.108-21.163-58.392-21.163-0.112 0-0.223 0-0.335 0.001h-288.921c0 0-0.001 0-0.002 0-19.511 0-35.328-15.817-35.328-35.328 0-0.12 0.001-0.24 0.002-0.36v-341.315c0-19.511 15.817-35.328 35.328-35.328h288.939c22.275-0.006 42.681-8.002 58.509-21.278l282.824-235.746c13.59-11.364 31.252-18.264 50.526-18.264 0.237 0 0.474 0.001 0.71 0.003h5.767c11.126 0.284 20.047 9.325 20.139 20.471v921.609c0 11.405-9.246 20.651-20.651 20.651zM897.195 26.112c0 0 0 0 0 0-22.81 0-41.301 18.491-41.301 41.301 0 7.055 1.769 13.697 4.887 19.506 51.092 98.083 80.617 226.425 80.617 361.081s-28.501 262.997-80.555 361.301c-2.336 5.017-3.7 10.892-3.7 17.085 0 22.81 18.491 41.301 41.301 41.301 14.865 0 27.897-7.854 35.171-19.638 58.3-109.917 90.385-252.253 90.385-400.050s-32.085-290.133-90.283-399.872c-7.072-13.194-20.767-22.016-36.522-22.016 0 0 0 0 0 0z" />
225
+ <glyph unicode="&#xe9b1;" glyph-name="fi-progress" d="M512 960c-282.503-0.353-511.38-229.448-511.38-512 0-123.465 43.701-236.723 116.479-325.15l-28.012-26.424 70.485-70.485 27.307 27.307 10.24-8.021q8.363-6.485 17.067-12.629c35.151-25.522 75.446-47.337 118.498-63.519q15.305-5.43 27.252-9.185 24.064-7.509 49.152-12.629c32.084-7.152 68.933-11.25 106.739-11.25 282.77 0 512 229.23 512 512s-229.23 512-512 512c-1.346 0-2.69-0.005-4.033-0.016zM51.2 448c0 254.493 206.307 460.8 460.8 460.8v-85.333c207.365 0 375.467-168.102 375.467-375.467s-168.102-375.467-375.467-375.467c-0.015 0-0.034 0-0.053 0-26.746 0-52.839 2.797-78.003 8.113-12.283 2.629-24.362 5.868-36.181 9.685-41.855 13.381-80.482 33.913-114.471 60.158l228.708 226.854v446.123c-207.317-0.063-375.356-168.141-375.356-375.467 0-86.079 28.967-165.392 77.684-228.724l-60.728-59.703c-63.692 78.032-102.311 178.711-102.4 288.407z" />
226
+ <glyph unicode="&#xe9b2;" glyph-name="fi-dashboard" d="M189.269 574.293c0-16.306-13.219-29.525-29.525-29.525s-29.525 13.219-29.525 29.525c0 16.306 13.219 29.525 29.525 29.525s29.525-13.219 29.525-29.525zM271.872 574.293c0-16.306-13.219-29.525-29.525-29.525s-29.525 13.219-29.525 29.525c0 16.306 13.219 29.525 29.525 29.525s29.525-13.219 29.525-29.525zM354.475 574.293c-0.004-16.303-13.222-29.517-29.525-29.517-16.306 0-29.525 13.219-29.525 29.525 0 16.066 12.833 29.135 28.807 29.517 16.342 0.001 29.561-13.218 29.561-29.525zM917.845 42.155h-811.691v586.24h811.691zM976.725 734.72h-929.451c-0.001 0-0.002 0-0.003 0-26.109 0-47.275-21.166-47.275-47.275 0-0.18 0.001-0.36 0.003-0.539v-703.631c0-26.109 21.166-47.275 47.275-47.275h929.451c26.109 0 47.275 21.166 47.275 47.275v703.659c0 26.109-21.166 47.275-47.275 47.275zM602.283 328.533h-65.365c-8.012 0-14.507-6.495-14.507-14.507v-207.36c0-8.012 6.495-14.507 14.507-14.507h65.365c8.012 0 14.507 6.495 14.507 14.507v207.36c0 8.012-6.495 14.507-14.507 14.507zM732.16 446.464h-65.536c-8.012 0-14.507-6.495-14.507-14.507v-325.291c0-8.012 6.495-14.507 14.507-14.507h65.536c8.012 0 14.507 6.495 14.507 14.507v324.267c0 8.012-6.495 14.507-14.507 14.507zM861.867 363.861h-65.365c-8.012 0-14.507-6.495-14.507-14.507v-242.688c0-8.012 6.495-14.507 14.507-14.507h65.365c8.012 0 14.507 6.495 14.507 14.507v242.688c0 8.012-6.495 14.507-14.507 14.507zM288.597 307.712l70.656 121.685c-20.284 11.993-44.701 19.080-70.773 19.080-77.762 0-140.8-63.038-140.8-140.8s63.038-140.8 140.8-140.8c76.394 0 138.577 60.84 140.742 136.71zM468.651 328.533c0 1.195 0 2.389 0 3.584-0.040 48.75-26.379 91.339-65.594 114.349l-67.355-114.349zM259.072 116.053h-106.496c-3.205 0-5.803-2.598-5.803-5.803v-12.117c0-3.205 2.598-5.803 5.803-5.803h106.496c3.205 0 5.803 2.598 5.803 5.803v12.117c0 3.205-2.598 5.803-5.803 5.803zM416.768 116.053h-106.496c-3.205 0-5.803-2.598-5.803-5.803v-12.117c0-3.205 2.598-5.803 5.803-5.803h106.496c3.205 0 5.803 2.598 5.803 5.803v12.117c0 3.205-2.598 5.803-5.803 5.803z" />
227
+ <glyph unicode="&#xe9b4;" glyph-name="fi-testing-bottle-beaker" horiz-adv-x="857" d="M853.333 2.389l-290.133 646.827v231.595c13.775 1.515 24.397 13.084 24.405 27.135v24.748c0 0.013 0 0.028 0 0.043 0 15.081-12.226 27.307-27.307 27.307-0.54 0-1.077-0.016-1.61-0.047l-260.364 0.003c-15.081 0-27.307-12.226-27.307-27.307v-24.917c0.009-14.052 10.63-25.621 24.283-27.125l0.122-231.435-290.133-646.827c-2.789-5.801-4.419-12.613-4.419-19.805 0-25.426 20.366-46.094 45.675-46.583l763.95-0.001c0.197-0.003 0.43-0.005 0.663-0.005 25.732 0 46.592 20.86 46.592 46.592 0 7.191-1.629 14.002-4.538 20.083zM477.867 635.733c37.703 0 68.267-30.564 68.267-68.267s-30.564-68.267-68.267-68.267c-37.703 0-68.267 30.564-68.267 68.267s30.564 68.267 68.267 68.267zM473.771 379.733c0-17.437-14.136-31.573-31.573-31.573s-31.573 14.136-31.573 31.573c0 17.437 14.136 31.573 31.573 31.573 17.066-0.476 30.72-14.424 30.72-31.562 0-0.004 0-0.008 0-0.012zM308.224 448c46.374 0 83.968-37.594 83.968-83.968s-37.594-83.968-83.968-83.968c-46.374 0-83.968 37.594-83.968 83.968s37.594 83.968 83.968 83.968zM789.675-12.8h-722.261c-0.014 0-0.030 0-0.046 0-4.619 0-8.363 3.744-8.363 8.363 0 1.236 0.268 2.41 0.75 3.466l87.189 193.996c1.002 0.025 2.182 0.039 3.365 0.039 23.648 0 45.982-5.625 65.737-15.611 11.807-6.312 26.8-10.243 42.712-10.243 1.011 0 2.018 0.016 3.021 0.047 0.080-0.006 0.348-0.007 0.616-0.007 16.409 0 31.844 4.173 45.301 11.515 18.425 9.355 40.759 14.981 64.406 14.981 1.183 0 2.363-0.014 3.539-0.042 0.839 0.029 2.032 0.043 3.228 0.043 23.635 0 45.956-5.626 65.697-15.611 11.822-6.312 26.828-10.242 42.753-10.242 0.997 0 1.991 0.015 2.981 0.046 0.7-0.031 1.694-0.046 2.691-0.046 15.924 0 30.931 3.93 44.103 10.872 19.296 9.324 42.571 14.918 67.152 14.918s47.856-5.594 68.62-15.578c11.885-6.36 27.101-10.334 43.246-10.334 1.983 0 3.953 0.060 5.907 0.178l-0.269-0.013 22.016-49.152 53.419-119.467c0.46-1.004 0.728-2.177 0.728-3.413 0-4.619-3.744-8.363-8.363-8.363-0.016 0-0.032 0-0.048 0z" />
228
+ <glyph unicode="&#xe9be;" glyph-name="fi-loader" d="M512 960c-34.404 0-62.293-27.89-62.293-62.293v-151.723c0-34.404 27.89-62.293 62.293-62.293s62.293 27.89 62.293 62.293v151.723c0 34.404-27.89 62.293-62.293 62.293zM512 212.309c-34.404 0-62.293-27.89-62.293-62.293v-151.723c0-34.404 27.89-62.293 62.293-62.293s62.293 27.89 62.293 62.293v151.723c0 34.404-27.89 62.293-62.293 62.293zM722.603 596.309c0.033 0 0.071 0 0.11 0 17.165 0 32.7 6.981 43.92 18.259l107.352 107.352c11.99 11.377 19.45 27.428 19.45 45.221 0 34.404-27.89 62.293-62.293 62.293-17.793 0-33.843-7.46-45.195-19.422l-107.375-107.377c-11.263-11.271-18.229-26.838-18.229-44.032 0-34.392 27.871-62.275 62.26-62.293zM301.397 299.691c-0.033 0-0.071 0-0.11 0-17.165 0-32.7-6.981-43.92-18.259l-107.352-107.352c-11.99-11.377-19.45-27.428-19.45-45.221 0-34.404 27.89-62.293 62.293-62.293 17.793 0 33.843 7.46 45.195 19.422l107.375 107.377c11.263 11.271 18.229 26.838 18.229 44.032 0 34.392-27.871 62.275-62.26 62.293zM961.707 510.293h-151.723c-34.404 0-62.293-27.89-62.293-62.293s27.89-62.293 62.293-62.293h151.723c34.404 0 62.293 27.89 62.293 62.293s-27.89 62.293-62.293 62.293zM276.309 448c0 34.404-27.89 62.293-62.293 62.293h-151.723c-34.404 0-62.293-27.89-62.293-62.293s27.89-62.293 62.293-62.293h151.723c34.404 0 62.293 27.89 62.293 62.293zM766.635 281.429c-11.377 11.99-27.428 19.45-45.221 19.45-34.404 0-62.293-27.89-62.293-62.293 0-17.793 7.46-33.843 19.422-45.195l107.377-107.375c11.377-11.99 27.428-19.45 45.221-19.45 34.404 0 62.293 27.89 62.293 62.293 0 17.793-7.46 33.843-19.422 45.195zM238.080 809.984c-11.14 10.571-26.233 17.073-42.843 17.073-34.404 0-62.293-27.89-62.293-62.293 0-16.611 6.502-31.703 17.099-42.871l107.323-107.322c11.377-11.99 27.428-19.45 45.221-19.45 34.404 0 62.293 27.89 62.293 62.293 0 17.793-7.46 33.843-19.422 45.195z" />
229
+ <glyph unicode="&#xe9bf;" glyph-name="fi-rocket-launch" horiz-adv-x="629" d="M435.029 794.453c-31.125 60.201-66.588 112.119-107.493 159.18-3.137 3.56-8.929 6.406-15.387 6.406s-12.25-2.846-16.192-7.353c-40.166-46.117-75.682-98.034-104.772-153.835zM439.808 218.624c43.008 121.515 108.203 328.875 8.875 547.669h-273.067c-99.328-218.795-34.133-426.667 8.875-547.669 2.598-7.137 9.209-12.192 17.035-12.458l220.191-0.001c7.858 0.266 14.469 5.322 17.025 12.328zM312.149 697.515c34.142-0.097 61.781-27.797 61.781-61.952 0-34.215-27.737-61.952-61.952-61.952s-61.952 27.737-61.952 61.952c0 0.060 0 0.12 0 0.18 0 34.206 27.737 61.943 61.952 61.943zM89.429 382.464c-29.355-58.368-80.725-108.032-89.429-266.069-0.017-0.2-0.027-0.434-0.027-0.669 0-4.619 3.744-8.363 8.363-8.363 2.824 0 5.322 1.4 6.836 3.544 38.93 55.834 133.138 89.114 146.108 102.426-25.762 48.102-47.772 103.962-63.133 162.515-1.804 6.993-3.298 8.091-5.048 8.091s-3.244-1.098-3.831-2.643zM539.819 382.464c29.184-58.539 80.555-108.032 89.259-266.069 0.017-0.2 0.027-0.434 0.027-0.669 0-4.619-3.744-8.363-8.363-8.363-2.824 0-5.322 1.4-6.836 3.544-38.93 55.834-133.138 89.114-146.108 102.426 25.762 48.102 47.772 103.962 63.133 162.515 1.804 6.993 3.298 8.091 5.048 8.091s3.244-1.098 3.831-2.643zM271.36 64.683l-4.437 1.536c6.354-48.821 22.355-92.862 46.059-131.686 21.976 38.834 37.92 82.879 44.045 130.007l-4.088 0.143c-12.141-4.48-26.162-7.072-40.789-7.072s-28.649 2.592-41.631 7.341zM372.736 118.272l22.699 5.461 17.067 53.419h-201.045l17.067-53.419 22.699-5.973c18.18-4.931 39.052-7.763 60.587-7.763s42.407 2.833 62.266 8.146z" />
230
+ <glyph unicode="&#xf8ff;" glyph-name="fi-arrow-left" horiz-adv-x="921" d="M8.704 468.992l388.949 388.608c5.491 5.46 13.061 8.836 21.419 8.836s15.927-3.375 21.42-8.837l62.463-62.463c5.46-5.491 8.836-13.061 8.836-21.419s-3.375-15.927-8.837-21.42l-229.887-230.057h621.227c0.203 0.006 0.443 0.009 0.683 0.009 14.647 0 26.532-11.828 26.623-26.453v-95.582c0-14.704-11.92-26.624-26.624-26.624h-621.909l230.4-230.4c5.46-5.491 8.836-13.061 8.836-21.419s-3.375-15.927-8.837-21.42l-62.975-61.951c-5.491-5.46-13.061-8.836-21.419-8.836s-15.927 3.375-21.42 8.837l-388.948 388.607c-5.38 5.401-8.706 12.851-8.706 21.077s3.326 15.677 8.707 21.078z" />
231
+ <glyph unicode="&#xfb01;" glyph-name="snapshot" horiz-adv-x="939" d="M52.224 749.227l312.832 180.736-208.555-361.472zM347.819 658.944l-121.685-210.944 120.832-209.579s0-1.024 0-1.365h247.808l121.173 204.8-124.416 216.576zM834.56 779.264l-312.832 180.736-104.448-180.736zM0 598.699v-361.472h208.725zM730.283 658.944l208.384-361.472v361.301zM886.784 146.944l-101.717 176.128-209.749-355.84zM417.621-64l106.155 180.224h-419.499l313.173-180.224z" />
232
+ <glyph unicode="&#xfb02;" glyph-name="hub" d="M602.283 538.283h-180.565l-0.171 120.491-90.283 60.245-90.283-60.245v-421.547l90.283-60.245 90.795 58.709v122.027h180.224v-120.491l90.453-60.245 90.283 60.245v421.547l-90.283 60.245-90.453-60.245v-120.491zM120.491 185.856v525.312l214.016 128.341h354.987l214.016-128.512v-525.995l-214.016-128.512h-354.816zM301.227 960l-301.227-180.736v-661.504l301.227-181.76h421.547l301.227 180.736v662.528l-301.227 180.736z" />
233
+ </font></defs></svg>
assets/shared-ui-2/fonts/WPMU-DEV-Icon.ttf ADDED
Binary file
assets/shared-ui-2/fonts/WPMU-DEV-Icon.woff ADDED
Binary file
assets/shared-ui-2/fonts/WPMU-DEV-Icon.woff2 ADDED
Binary file
assets/shared-ui-2/images/graphic-hb-minify-summary@2x.png ADDED
Binary file
assets/shared-ui-2/images/plugins-crawl-icon.png ADDED
Binary file
assets/shared-ui-2/images/plugins-crawl-icon@2x.png ADDED
Binary file
assets/shared-ui-2/images/plugins-crawl.jpg ADDED
Binary file
assets/shared-ui-2/images/plugins-defender-icon.png ADDED
Binary file
assets/shared-ui-2/images/plugins-defender-icon@2x.png ADDED
Binary file
assets/shared-ui-2/images/plugins-defender.jpg ADDED
Binary file
assets/shared-ui-2/images/plugins-smush-icon.png ADDED
Binary file
assets/shared-ui-2/images/plugins-smush-icon@2x.png ADDED
Binary file
assets/shared-ui-2/images/plugins-smush.jpg ADDED
Binary file
assets/shared-ui-2/js/admin.min.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ !function(t){function e(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=1)}([function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";n(2),console.log("This is the entry point.")},function(t,e,n){(function(n,i,o){var r,s,a,a;/*!
2
+ * WPMU DEV Shared UI
3
+ * Copyright 2018 Incsub (https://incsub.com)
4
+ * Licensed under GPL v2 (http://www.gnu.org/licenses/gpl-2.0.html)
5
+ */
6
+ !function(n){"use strict";function i(t,e){this._show=this.show.bind(this),this._hide=this.hide.bind(this),this._maintainFocus=this._maintainFocus.bind(this),this._bindKeypress=this._bindKeypress.bind(this),this.node=t,this._listeners={},this.create(e)}function o(t){return Array.prototype.slice.call(t)}function a(t,e){return o((e||document).querySelectorAll(t))}function c(t){return NodeList.prototype.isPrototypeOf(t)?o(t):Element.prototype.isPrototypeOf(t)?[t]:"string"==typeof t?a(t):void 0}function u(t){var e=l(t);e.length&&e[0].focus()}function l(t){return a(p.join(","),t).filter(function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)})}function d(t,e){var n=l(t),i=n.indexOf(document.activeElement);e.shiftKey&&0===i?(n[n.length-1].focus(),e.preventDefault()):e.shiftKey||i!==n.length-1||(n[0].focus(),e.preventDefault())}function f(t){var e=o(t.parentNode.childNodes),n=e.filter(function(t){return 1===t.nodeType});return n.splice(n.indexOf(t),1),n}var h,p=["a[href]","area[href]","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","iframe","object","embed","[contenteditable]",'[tabindex]:not([tabindex^="-"])'];i.prototype.create=function(t){return this._targets=this._targets||c(t)||f(this.node),this.node.setAttribute("aria-hidden",!0),this.shown=!1,this._openers=a('[data-a11y-dialog-show="'+this.node.id+'"]'),this._openers.forEach(function(t){t.addEventListener("click",this._show)}.bind(this)),this._closers=a("[data-a11y-dialog-hide]",this.node).concat(a('[data-a11y-dialog-hide="'+this.node.id+'"]')),this._closers.forEach(function(t){t.addEventListener("click",this._hide)}.bind(this)),this._fire("create"),this},i.prototype.show=function(t){if(this.shown)return this;var e=this.node.getElementsByClassName("sui-dialog-overlay");return this.node.getElementsByClassName("sui-dialog-content")[0].className="sui-dialog-content sui-bounce-in",e[0].className="sui-dialog-overlay sui-fade-in",this.shown=!0,this.node.removeAttribute("aria-hidden"),this._targets.forEach(function(t){var e=t.getAttribute("aria-hidden");e&&t.setAttribute("data-a11y-dialog-original",e),t.setAttribute("aria-hidden","true")}),h=document.activeElement,u(this.node),document.body.addEventListener("focus",this._maintainFocus,!0),document.addEventListener("keydown",this._bindKeypress),this._fire("show",t),this},i.prototype.hide=function(t){if(!this.shown)return this;var e=this.node.getElementsByClassName("sui-dialog-overlay");this.node.getElementsByClassName("sui-dialog-content")[0].className="sui-dialog-content sui-bounce-out",e[0].className="sui-dialog-overlay sui-fade-out",this.shown=!1;var n=this.node;return setTimeout(function(){n.setAttribute("aria-hidden","true")},300),this._targets.forEach(function(t){var e=t.getAttribute("data-a11y-dialog-original");e?(t.setAttribute("aria-hidden",e),t.removeAttribute("data-a11y-dialog-original")):t.removeAttribute("aria-hidden")}),h&&h.focus(),document.body.removeEventListener("focus",this._maintainFocus,!0),document.removeEventListener("keydown",this._bindKeypress),this._fire("hide",t),this},i.prototype.destroy=function(){return this.hide(),this._openers.forEach(function(t){t.removeEventListener("click",this._show)}.bind(this)),this._closers.forEach(function(t){t.removeEventListener("click",this._hide)}.bind(this)),this._fire("destroy"),this._listeners={},this},i.prototype.on=function(t,e){return void 0===this._listeners[t]&&(this._listeners[t]=[]),this._listeners[t].push(e),this},i.prototype.off=function(t,e){var n=this._listeners[t].indexOf(e);return n>-1&&this._listeners[t].splice(n,1),this},i.prototype._fire=function(t,e){(this._listeners[t]||[]).forEach(function(t){t(this.node,e)}.bind(this))},i.prototype._bindKeypress=function(t){this.shown&&27===t.which&&(t.preventDefault(),this.hide()),this.shown&&9===t.which&&d(this.node,t)},i.prototype._maintainFocus=function(t){this.shown&&!this.node.contains(t.target)&&u(this.node)},void 0!==t&&void 0!==t.exports?t.exports=i:(r=[],void 0!==(s=function(){return i}.apply(e,r))&&(t.exports=s))}(void 0!==n||window),function(t){t(".sui-2-1-0 .sui-accordion").on("click",".sui-accordion-item",function(){var e=t(this).closest(".sui-accordion-item"),n=e.nextUntil(".sui-accordion-item");n.toggleClass("sui-accordion-item--open"),n.hasClass("sui-accordion-item--open")?e.addClass("sui-accordion-item--open"):e.removeClass("sui-accordion-item--open")})}(jQuery),function(e){t.exports=e()}(function(){var t;return function t(e,n,i){function o(s,c){if(!n[s]){if(!e[s]){var u="function"==typeof a&&a;if(!c&&u)return a(s,!0);if(r)return r(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var d=n[s]={exports:{}};e[s][0].call(d.exports,function(t){var n=e[s][1][t];return o(n||t)},d,d.exports,t,e,n,i)}return n[s].exports}for(var r="function"==typeof a&&a,s=0;s<i.length;s++)o(i[s]);return o}({1:[function(t,e,n){function i(t,e){for(;t&&t.nodeType!==o;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var o=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}e.exports=i},{}],2:[function(t,e,n){function i(t,e,n,i,r){var s=o.apply(this,arguments);return t.addEventListener(n,s,r),{destroy:function(){t.removeEventListener(n,s,r)}}}function o(t,e,n,i){return function(n){n.delegateTarget=r(n.target,e),n.delegateTarget&&i.call(t,n)}}var r=t("./closest");e.exports=i},{"./closest":1}],3:[function(t,e,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},{}],4:[function(t,e,n){function i(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!a.string(e))throw new TypeError("Second argument must be a String");if(!a.fn(n))throw new TypeError("Third argument must be a Function");if(a.node(t))return o(t,e,n);if(a.nodeList(t))return r(t,e,n);if(a.string(t))return s(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function o(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function r(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function s(t,e,n){return c(document.body,t,e,n)}var a=t("./is"),c=t("delegate");e.exports=i},{"./is":3,delegate:2}],5:[function(t,e,n){function i(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var i=window.getSelection(),o=document.createRange();o.selectNodeContents(t),i.removeAllRanges(),i.addRange(o),e=i.toString()}return e}e.exports=i},{}],6:[function(t,e,n){function i(){}i.prototype={on:function(t,e,n){var i=this.e||(this.e={});return(i[t]||(i[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function i(){o.off(t,i),e.apply(n,arguments)}var o=this;return i._=e,this.on(t,i,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),i=0,o=n.length;for(i;i<o;i++)n[i].fn.apply(n[i].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),i=n[t],o=[];if(i&&e)for(var r=0,s=i.length;r<s;r++)i[r].fn!==e&&i[r].fn._!==e&&o.push(i[r]);return o.length?n[t]=o:delete n[t],this}},e.exports=i},{}],7:[function(e,n,i){!function(o,r){if("function"==typeof t&&t.amd)t(["module","select"],r);else if(void 0!==i)r(n,e("select"));else{var s={exports:{}};r(s,o.select),o.clipboardAction=s.exports}}(this,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(t){return t&&t.__esModule?t:{default:t}}(e),o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),s=function(){function t(e){n(this,t),this.resolveOptions(e),this.initSelection()}return r(t,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.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[e?"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 t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"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 t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"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(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":o(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=s})},{select:5}],8:[function(e,n,i){!function(o,r){if("function"==typeof t&&t.amd)t(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if(void 0!==i)r(n,e("./clipboard-action"),e("tiny-emitter"),e("good-listener"));else{var s={exports:{}};r(s,o.clipboardAction,o.tinyEmitter,o.goodListener),o.clipboard=s.exports}}(this,function(t,e,n,i){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}var u=o(e),l=o(n),d=o(i),f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},h=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),p=function(t){function e(t,n){r(this,e);var i=s(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return i.resolveOptions(n),i.listenClick(t),i}return a(e,t),h(e,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===f(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,d.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new u.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return c("action",t)}},{key:"defaultTarget",value:function(t){var e=c("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return c("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(l.default);t.exports=p})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)}),function(t){t(".sui-2-1-0 .sui-code-snippet:not(.sui-no-copy)").each(function(e){var n="sui-code-snippet-"+e,i='<button class="sui-button" data-clipboard-target="#'+n+'">Copy</button>';t(this).wrap('<div class="sui-code-snippet-wrapper"></div>'),t(this).attr("id",n).after(i)}),t(document).ready(function(){function e(e,n){t(e).addClass("sui-tooltip"),t(e).attr("aria-label",n),t(e).attr("data-tooltip",n)}var n=t("[data-clipboard-target]"),o=new i("[data-clipboard-target]");n.length&&(o.on("success",function(t){t.clearSelection(),e(t.trigger,"Copied!")}),n.mouseleave(function(){t(this).removeClass("sui-tooltip"),t(this).removeAttr("aria-label"),t(this).removeAttr("data-tooltip")}))})}(jQuery),function(t){"use strict";"object"!=typeof window.SUI&&(window.SUI={}),SUI.linkDropdown=function(){function e(e){var n=t(".sui-2-1-0 .sui-dropdown");e&&(n=n.not(e)),n.removeClass("open")}t("body").click(function(n){var i=t(n.target),o=i.closest(".sui-dropdown");0==o.length?e():i.is("a")&&(n.preventDefault(),e(o),o.toggleClass("open"))})},SUI.linkDropdown()}(jQuery),function(t){"use strict";"object"!=typeof window.SUI&&(window.SUI={}),document.addEventListener("DOMContentLoaded",function(){var e=t(".sui-wrap");t(".sui-dialog").each(function(){new o(this,e)})})}(jQuery),function(t){t(".sui-2-1-0 .sui-notice-top:not(.sui-cant-dismiss)").delay(3e3).slideUp("slow"),t(".sui-2-1-0 .sui-notice-dismiss").click(function(e){return e.preventDefault(),t(this).parent(".sui-notice").stop().slideUp("slow"),!1})}(jQuery),function(t){"use strict";"object"!=typeof window.SUI&&(window.SUI={}),SUI.showHidePassword=function(){t(".sui-2-1-0 .sui-password-group").each(function(){var e=t(this),n=e.find('input[type="password"]'),i=e.find(".sui-password-toggle");i.on("click",function(){var e="",o="";t(this).toggleClass("is-visible"),n.hasClass("is-visible")?(n.removeClass("is-visible").addClass("is-hidden"),e="password",i.find("> .sui-screen-reader-text").text("Show Password"),i.find("> i").removeClass("sui-ico-eye-hide").addClass("sui-ico-eye")):(n.removeClass("is-hidden").addClass("is-visible"),e="text",i.find("> .sui-screen-reader-text").text("Hide Password"),i.find("> i").removeClass("sui-ico-eye").addClass("sui-ico-eye-hide")),o=t("<input type="+e+" />").attr("id",n.attr("id")).attr("name",n.attr("name")).attr("class",n.attr("class")).val(n.val()).insertBefore(n),n.remove(),n=o,n.focus()})})},SUI.showHidePassword()}(jQuery),function(t){loadCircleScore=function(e){var n=(t(e).find("svg circle:last-child"),t(e).data("score")),i=2*Math.PI*42,o=i/100*n,r=100*o-n,s='<svg viewbox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">\n<circle stroke-width="16" cx="50" cy="50" r="42" />\n<circle stroke-width="16" cx="50" cy="50" r="42" stroke-dasharray="0,'+r+'" />\n</svg>\n<span class="sui-circle-score-label">'+n+"</span>\n";t(e).prepend(s).addClass("loaded").find("circle:last-child").css("animation","sui"+n+" 3s forwards")},t(".sui-2-1-0 .sui-circle-score").each(function(){loadCircleScore(this)})}(jQuery),function(t){suiSelect=function(e){function n(){y.wrap('<div class="select-container">'),y.hide(),l=y.parent(),d=t('<span class="dropdown-handle"><i class="sui-icon-chevron-down" aria-hidden="true"></i></span>').prependTo(l),f=t('<div class="select-list-container"></div>').appendTo(l),h=t('<div class="list-value">&nbsp;</div>').appendTo(f),p=t('<ul class="list-results"></ul>').appendTo(f),l.addClass(y.attr("class"))}function i(){y.on("sui:change",function(){o(),p.find("li").not(".optgroup-label").on("click",function(e){u(t(e.target),!1),r()})})}function o(){p.empty(),y.find("optgroup").length?y.find("optgroup").each(function(){var e,n=t(this);e=t("<ul></ul>").appendTo(p),$label=t('<li class="optgroup-label"></li>').text(n.prop("label")),e.html($label),e.addClass("optgroup"),n.find("option").each(function(){var n,i=t(this);n=t("<li></li>").appendTo(e),n.text(i.text()),n.data("value",i.val()),i.val()==y.val()&&u(n)})}):y.find("option").each(function(){var e,n=t(this);e=t("<li></li>").appendTo(p),e.text(n.text()),e.data("value",n.val()),n.val()==y.val()&&u(e,!0)})}function r(){var t=y[0].value;t.match("^https?://|#")&&(window.location.href=t)}function s(){l.find("select").is(":disabled")||(l.hasClass("active")?a():c())}function a(t){t||(t=l),t.removeClass("active"),t.closest("tr").removeClass("select-open")}function c(){t(".select-container.active").each(function(){a(t(this))}),l.addClass("active"),l.closest("tr").addClass("select-open")}function u(e,n){n=void 0!==n&&n,h.text(e.text()),t(".current",p).removeClass("current"),e.addClass("current"),a(),y.val(e.data("value")),n||y.trigger("change")}var l,d,f,h,p,y=t(e);if(y.is("select")&&!(y.closest(".select-container").length||y.data("select2")||y.is(".none-sui")))return function(){var e;n(),o(),i(),p.find("li").not(".optgroup-label").on("click",function(e){u(t(e.target),!1),r()}),d.on("click",s),h.on("click",s),y.on("focus",c),t(document).click(function(e){var n,i=t(e.target);i.closest(".select-container").length||i.is("label")&&i.attr("for")&&(n=i.attr("for"),t("select#"+n).length)||a()}),e=y.attr("id"),e&&t("label[for="+e+"]").on("click",c),y.addClass("sui-styled")}(),this},t(".sui-2-1-0 select").each(function(){suiSelect(this)})}(jQuery),function(t){suiTabs=function(e){function n(){window.setTimeout(i,20)}function i(){var t=a.find(".sui-tab > input:checked").parent(),e=t.find(".sui-tab-content");a.height(e.outerHeight()+t.outerHeight()-6)}function o(){var t=a.find(".sui-tab > input:checked");a.find(".sui-tab label.active").removeClass("active"),t.parent().find("label").addClass("active"),n()}function r(){var t,e=window.location.hash.replace(/[^\w-_]/g,"");e&&(t=a.find("input#"+e),t.parent().find("label").length&&(a.find(".sui-tab label.active").removeClass("active"),t.parent().find("label").addClass("active"),t.length&&!t.prop("checked")&&(t.prop("checked",!0),s())))}function s(){n(),t("html, body").scrollTop(a.offset().top-parseInt(t("html").css("paddingTop"))-20)}var a=t(e).closest(".sui-tabs");if(a.length)return function(){var e=a.find(".sui-tab > input:checked");a.on("click",".sui-tab > input[type=radio]",o),t(window).on("hashchange",r),e.parent().find("label").addClass("active"),n(),r()}(),t(window).resize(function(){n()}),this},t(".sui-2-1-0 .sui-tabs").each(function(){suiTabs(this)})}(jQuery),function(t){"use strict";"object"!=typeof window.SUI&&(window.SUI={}),SUI.upload=function(){t('.sui-2-1-0 .sui-upload-group input[type="file"]').on("change",function(e){var n=t(this)[0].files[0],i=t(this).find("~ .sui-upload-message");n&&i.text(n.name)})},SUI.upload()}(jQuery)}).call(e,n(0),n(3),n(4))},function(t,e,n){var i,i;!function(e){t.exports=e()}(function(){var t;return function t(e,n,o){function r(a,c){if(!n[a]){if(!e[a]){var u="function"==typeof i&&i;if(!c&&u)return i(a,!0);if(s)return s(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var d=n[a]={exports:{}};e[a][0].call(d.exports,function(t){var n=e[a][1][t];return r(n||t)},d,d.exports,t,e,n,o)}return n[a].exports}for(var s="function"==typeof i&&i,a=0;a<o.length;a++)r(o[a]);return r}({1:[function(t,e,n){function i(t,e){for(;t&&t.nodeType!==o;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var o=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}e.exports=i},{}],2:[function(t,e,n){function i(t,e,n,i,r){var s=o.apply(this,arguments);return t.addEventListener(n,s,r),{destroy:function(){t.removeEventListener(n,s,r)}}}function o(t,e,n,i){return function(n){n.delegateTarget=r(n.target,e),n.delegateTarget&&i.call(t,n)}}var r=t("./closest");e.exports=i},{"./closest":1}],3:[function(t,e,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},{}],4:[function(t,e,n){function i(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!a.string(e))throw new TypeError("Second argument must be a String");if(!a.fn(n))throw new TypeError("Third argument must be a Function");if(a.node(t))return o(t,e,n);if(a.nodeList(t))return r(t,e,n);if(a.string(t))return s(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function o(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function r(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function s(t,e,n){return c(document.body,t,e,n)}var a=t("./is"),c=t("delegate");e.exports=i},{"./is":3,delegate:2}],5:[function(t,e,n){function i(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var i=window.getSelection(),o=document.createRange();o.selectNodeContents(t),i.removeAllRanges(),i.addRange(o),e=i.toString()}return e}e.exports=i},{}],6:[function(t,e,n){function i(){}i.prototype={on:function(t,e,n){var i=this.e||(this.e={});return(i[t]||(i[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function i(){o.off(t,i),e.apply(n,arguments)}var o=this;return i._=e,this.on(t,i,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),i=0,o=n.length;for(i;i<o;i++)n[i].fn.apply(n[i].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),i=n[t],o=[];if(i&&e)for(var r=0,s=i.length;r<s;r++)i[r].fn!==e&&i[r].fn._!==e&&o.push(i[r]);return o.length?n[t]=o:delete n[t],this}},e.exports=i},{}],7:[function(e,n,i){!function(o,r){if("function"==typeof t&&t.amd)t(["module","select"],r);else if(void 0!==i)r(n,e("select"));else{var s={exports:{}};r(s,o.select),o.clipboardAction=s.exports}}(this,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(t){return t&&t.__esModule?t:{default:t}}(e),o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),s=function(){function t(e){n(this,t),this.resolveOptions(e),this.initSelection()}return r(t,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.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[e?"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 t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"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 t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"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(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":o(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=s})},{select:5}],8:[function(e,n,i){!function(o,r){if("function"==typeof t&&t.amd)t(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if(void 0!==i)r(n,e("./clipboard-action"),e("tiny-emitter"),e("good-listener"));else{var s={exports:{}};r(s,o.clipboardAction,o.tinyEmitter,o.goodListener),o.clipboard=s.exports}}(this,function(t,e,n,i){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}var u=o(e),l=o(n),d=o(i),f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},h=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),p=function(t){function e(t,n){r(this,e);var i=s(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return i.resolveOptions(n),i.listenClick(t),i}return a(e,t),h(e,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===f(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,d.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new u.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return c("action",t)}},{key:"defaultTarget",value:function(t){var e=c("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return c("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(l.default);t.exports=p})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)})},function(t,e,n){(function(n){var i,o;!function(n){"use strict";function r(t,e){this._show=this.show.bind(this),this._hide=this.hide.bind(this),this._maintainFocus=this._maintainFocus.bind(this),this._bindKeypress=this._bindKeypress.bind(this),this.node=t,this._listeners={},this.create(e)}function s(t){return Array.prototype.slice.call(t)}function a(t,e){return s((e||document).querySelectorAll(t))}function c(t){return NodeList.prototype.isPrototypeOf(t)?s(t):Element.prototype.isPrototypeOf(t)?[t]:"string"==typeof t?a(t):void 0}function u(t){var e=l(t);e.length&&e[0].focus()}function l(t){return a(p.join(","),t).filter(function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)})}function d(t,e){var n=l(t),i=n.indexOf(document.activeElement);e.shiftKey&&0===i?(n[n.length-1].focus(),e.preventDefault()):e.shiftKey||i!==n.length-1||(n[0].focus(),e.preventDefault())}function f(t){var e=s(t.parentNode.childNodes),n=e.filter(function(t){return 1===t.nodeType});return n.splice(n.indexOf(t),1),n}var h,p=["a[href]","area[href]","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","iframe","object","embed","[contenteditable]",'[tabindex]:not([tabindex^="-"])'];r.prototype.create=function(t){return this._targets=this._targets||c(t)||f(this.node),this.node.setAttribute("aria-hidden",!0),this.shown=!1,this._openers=a('[data-a11y-dialog-show="'+this.node.id+'"]'),this._openers.forEach(function(t){t.addEventListener("click",this._show)}.bind(this)),this._closers=a("[data-a11y-dialog-hide]",this.node).concat(a('[data-a11y-dialog-hide="'+this.node.id+'"]')),this._closers.forEach(function(t){t.addEventListener("click",this._hide)}.bind(this)),this._fire("create"),this},r.prototype.show=function(t){if(this.shown)return this;var e=this.node.getElementsByClassName("sui-dialog-overlay");return this.node.getElementsByClassName("sui-dialog-content")[0].className="sui-dialog-content sui-bounce-in",e[0].className="sui-dialog-overlay sui-fade-in",this.shown=!0,this.node.removeAttribute("aria-hidden"),this._targets.forEach(function(t){var e=t.getAttribute("aria-hidden");e&&t.setAttribute("data-a11y-dialog-original",e),t.setAttribute("aria-hidden","true")}),h=document.activeElement,u(this.node),document.body.addEventListener("focus",this._maintainFocus,!0),document.addEventListener("keydown",this._bindKeypress),this._fire("show",t),this},r.prototype.hide=function(t){if(!this.shown)return this;var e=this.node.getElementsByClassName("sui-dialog-overlay");this.node.getElementsByClassName("sui-dialog-content")[0].className="sui-dialog-content sui-bounce-out",e[0].className="sui-dialog-overlay sui-fade-out",this.shown=!1;var n=this.node;return setTimeout(function(){n.setAttribute("aria-hidden","true")},300),this._targets.forEach(function(t){var e=t.getAttribute("data-a11y-dialog-original");e?(t.setAttribute("aria-hidden",e),t.removeAttribute("data-a11y-dialog-original")):t.removeAttribute("aria-hidden")}),h&&h.focus(),document.body.removeEventListener("focus",this._maintainFocus,!0),document.removeEventListener("keydown",this._bindKeypress),this._fire("hide",t),this},r.prototype.destroy=function(){return this.hide(),this._openers.forEach(function(t){t.removeEventListener("click",this._show)}.bind(this)),this._closers.forEach(function(t){t.removeEventListener("click",this._hide)}.bind(this)),this._fire("destroy"),this._listeners={},this},r.prototype.on=function(t,e){return void 0===this._listeners[t]&&(this._listeners[t]=[]),this._listeners[t].push(e),this},r.prototype.off=function(t,e){var n=this._listeners[t].indexOf(e);return n>-1&&this._listeners[t].splice(n,1),this},r.prototype._fire=function(t,e){(this._listeners[t]||[]).forEach(function(t){t(this.node,e)}.bind(this))},r.prototype._bindKeypress=function(t){this.shown&&27===t.which&&(t.preventDefault(),this.hide()),this.shown&&9===t.which&&d(this.node,t)},r.prototype._maintainFocus=function(t){this.shown&&!this.node.contains(t.target)&&u(this.node)},void 0!==t&&void 0!==t.exports?t.exports=r:(i=[],void 0!==(o=function(){return r}.apply(e,i))&&(t.exports=o))}(void 0!==n||window)}).call(e,n(0))}]);
7
+ //# sourceMappingURL=admin.min.js.map
assets/shared-ui-2/js/admin.min.js.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sources":["webpack:///admin.min.js","webpack:///webpack/bootstrap 25ae4da958e7cc0546a0","webpack:///(webpack)/buildin/global.js","webpack:///./_src/js/index.js","webpack:///./node_modules/@wpmudev/shared-ui/dist/js/shared-ui.js","webpack:///./node_modules/@wpmudev/shared-ui/js/clipboard.js","webpack:///./node_modules/@wpmudev/shared-ui/js/a11y-dialog.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","g","this","Function","eval","e","window","console","log","global","ClipboardJS","A11yDialog","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","require","node","targets","_show","show","bind","_hide","hide","_maintainFocus","_bindKeypress","_listeners","create","toArray","collection","Array","slice","$$","selector","context","document","querySelectorAll","collect","target","NodeList","isPrototypeOf","Element","setFocusToFirstItem","focusableChildren","getFocusableChildren","length","focus","FOCUSABLE_ELEMENTS","join","filter","child","offsetWidth","offsetHeight","getClientRects","trapTabKey","event","focusedItemIndex","indexOf","activeElement","shiftKey","preventDefault","getSiblings","nodes","parentNode","childNodes","siblings","nodeType","splice","focusedBeforeDialog","_targets","setAttribute","shown","_openers","id","forEach","opener","addEventListener","_closers","concat","closer","_fire","overlay","getElementsByClassName","className","removeAttribute","original","getAttribute","body","timeout_node","setTimeout","removeEventListener","destroy","on","type","handler","push","off","index","listener","which","contains","undefined","apply","$","getParentItem","closest","getNextAdditionalContentRow","nextUntil","toggleClass","hasClass","addClass","removeClass","jQuery","f","define","t","r","u","a","Error","code","1","element","DOCUMENT_NODE_TYPE","matches","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","2","delegate","callback","useCapture","listenerFn","arguments","delegateTarget","./closest","3","value","HTMLElement","nodeList","toString","string","String","fn","4","listen","is","TypeError","listenNode","listenNodeList","listenSelector","./is","5","select","selectedText","nodeName","isReadOnly","hasAttribute","setSelectionRange","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","6","E","ctx","once","self","_","emit","data","evtArr","len","evts","liveEvents","7","factory","amd","mod","clipboardAction","_select","_classCallCheck","instance","Constructor","_select2","obj","default","_typeof","Symbol","iterator","constructor","_createClass","defineProperties","props","descriptor","writable","key","protoProps","staticProps","ClipboardJSAction","options","resolveOptions","initSelection","action","container","emitter","text","trigger","selectFake","selectTarget","_this","isRTL","documentElement","removeFake","fakeHandlerCallback","fakeHandler","fakeElem","createElement","style","fontSize","border","padding","margin","position","yPosition","pageYOffset","scrollTop","top","appendChild","copyText","removeChild","succeeded","execCommand","err","handleResult","clearSelection","set","_action","_target","8","tinyEmitter","goodListener","clipboard","_clipboardAction","_tinyEmitter","_goodListener","_interopRequireDefault","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","setPrototypeOf","__proto__","getAttributeValue","suffix","attribute","_clipboardAction2","_tinyEmitter2","_goodListener2","_Emitter","getPrototypeOf","listenClick","defaultAction","defaultTarget","defaultText","_this2","onClick","currentTarget","querySelector","actions","support","queryCommandSupported","./clipboard-action","good-listener","tiny-emitter","each","button","wrap","attr","after","ready","showTooltip","msg","btns","mouseleave","removeAttr","SUI","linkDropdown","closeAllDropdowns","$except","$dropdowns","not","click","$this","$el","mainEl","delay","slideUp","parent","stop","showHidePassword","$input","find","$button","$inputType","$repInput","val","insertBefore","remove","loadCircleScore","el","score","circumference","Math","PI","dashLength","gapLength","svg","prepend","css","suiSelect","setupElement","jq","handle","prependTo","list","appendTo","items","handleSelectionChange","populateList","ev","selectItem","handleValue","empty","optGroupItem","optgroup","$label","prop","html","item","opt","match","location","href","stateToggle","stateClose","stateOpen","isInit","selectID","suiTabs","resizeArea","resizeAreaHandler","current","content","height","outerHeight","updateHash","switchTab","curTab","route","hash","replace","scrollWindow","offset","parseInt","resize","upload","file","files","message"],"mappings":"CAAS,SAAUA,GCInB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QAvBA,GAAAD,KA4BAF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,EAGAF,EAAAU,EAAA,SAAAP,EAAAQ,EAAAC,GACAZ,EAAAa,EAAAV,EAAAQ,IACAG,OAAAC,eAAAZ,EAAAQ,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAZ,EAAAmB,EAAA,SAAAf,GACA,GAAAQ,GAAAR,KAAAgB,WACA,WAA2B,MAAAhB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAAU,EAAAE,EAAA,IAAAA,GACAA,GAIAZ,EAAAa,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAGtDtB,EAAAyB,EAAA,GAGAzB,IAAA0B,EAAA,KDMM,SAAUtB,EAAQD,GEnExB,GAAAwB,EAGAA,GAAA,WACA,MAAAC,QAGA,KAEAD,KAAAE,SAAA,qBAAAC,MAAA,QACC,MAAAC,GAED,gBAAAC,UACAL,EAAAK,QAOA5B,EAAAD,QAAAwB,GF0EM,SAAUvB,EAAQD,EAASH,GAEjC,YGhGAA,GAAA,GAEAiC,QAAQC,IAAI,6BHuGN,SAAU9B,EAAQD,EAASH,IAEL,SAASmC,EAAQC,EAAaC,GAAa,GAAIC,GAA8BC,EAAkCC,EI3G3IA;;;;;CAOA,SAAAL,GACA,YAcA,SAAAE,GAAAI,EAAAC,GAGAd,KAAAe,MAAAf,KAAAgB,KAAAC,KAAAjB,MACAA,KAAAkB,MAAAlB,KAAAmB,KAAAF,KAAAjB,MACAA,KAAAoB,eAAApB,KAAAoB,eAAAH,KAAAjB,MACAA,KAAAqB,cAAArB,KAAAqB,cAAAJ,KAAAjB,MAGAA,KAAAa,OAGAb,KAAAsB,cAGAtB,KAAAuB,OAAAT,GAiRA,QAAAU,GAAAC,GACA,MAAAC,OAAA/B,UAAAgC,MAAAhD,KAAA8C,GAWA,QAAAG,GAAAC,EAAAC,GACA,MAAAN,IAAAM,GAAAC,UAAAC,iBAAAH,IAUA,QAAAI,GAAAC,GACA,MAAAC,UAAAxC,UAAAyC,cAAAF,GACAV,EAAAU,GAGAG,QAAA1C,UAAAyC,cAAAF,IACAA,GAGA,gBAAAA,GACAN,EAAAM,OADA,GAUA,QAAAI,GAAAzB,GACA,GAAA0B,GAAAC,EAAA3B,EAEA0B,GAAAE,QACAF,EAAA,GAAAG,QAUA,QAAAF,GAAA3B,GACA,MAAAe,GAAAe,EAAAC,KAAA,KAAA/B,GAAAgC,OAAA,SAAAC,GACA,SAAAA,EAAAC,aAAAD,EAAAE,cAAAF,EAAAG,iBAAAR,UAUA,QAAAS,GAAArC,EAAAsC,GACA,GAAAZ,GAAAC,EAAA3B,GACAuC,EAAAb,EAAAc,QAAAtB,SAAAuB,cAKAH,GAAAI,UAAA,IAAAH,GACAb,IAAAE,OAAA,GAAAC,QACAS,EAAAK,kBAIKL,EAAAI,UAAAH,IAAAb,EAAAE,OAAA,IACLF,EAAA,GAAAG,QACAS,EAAAK,kBAUA,QAAAC,GAAA5C,GACA,GAAA6C,GAAAlC,EAAAX,EAAA8C,WAAAC,YACAC,EAAAH,EAAAb,OAAA,SAAAhC,GACA,WAAAA,EAAAiD,UAKA,OAFAD,GAAAE,OAAAF,EAAAR,QAAAxC,GAAA,GAEAgD,EAjZA,GAGAG,GAHArB,GAAA,4MAoCAlC,GAAAd,UAAA4B,OAAA,SAAAT,GA2BA,MAzBAd,MAAAiE,SAAAjE,KAAAiE,UAAAhC,EAAAnB,IAAA2C,EAAAzD,KAAAa,MAIAb,KAAAa,KAAAqD,aAAA,kBACAlE,KAAAmE,OAAA,EAIAnE,KAAAoE,SAAAxC,EAAA,2BAAA5B,KAAAa,KAAAwD,GAAA,MACArE,KAAAoE,SAAAE,QAAA,SAAAC,GACAA,EAAAC,iBAAA,QAAAxE,KAAAe,QACKE,KAAAjB,OAILA,KAAAyE,SAAA7C,EAAA,0BAAA5B,KAAAa,MACA6D,OAAA9C,EAAA,2BAAA5B,KAAAa,KAAAwD,GAAA,OACArE,KAAAyE,SAAAH,QAAA,SAAAK,GACAA,EAAAH,iBAAA,QAAAxE,KAAAkB,QACKD,KAAAjB,OAGLA,KAAA4E,MAAA,UAEA5E,MAWAS,EAAAd,UAAAqB,KAAA,SAAAmC,GAEA,GAAAnD,KAAAmE,MACA,MAAAnE,KAGA,IAAA6E,GAAA7E,KAAAa,KAAAiE,uBAAA,qBAoCA,OAnCA9E,MAAAa,KAAAiE,uBAAA,sBACA,GAAAC,UAAA,mCACAF,EAAA,GAAAE,UAAA,iCAEA/E,KAAAmE,OAAA,EACAnE,KAAAa,KAAAmE,gBAAA,eAKAhF,KAAAiE,SAAAK,QAAA,SAAApC,GACA,GAAA+C,GAAA/C,EAAAgD,aAAA,cAEAD,IACA/C,EAAAgC,aAAA,4BAAAe,GAGA/C,EAAAgC,aAAA,wBAMAF,EAAAjC,SAAAuB,cACAhB,EAAAtC,KAAAa,MAKAkB,SAAAoD,KAAAX,iBAAA,QAAAxE,KAAAoB,gBAAA,GACAW,SAAAyC,iBAAA,UAAAxE,KAAAqB,eAGArB,KAAA4E,MAAA,OAAAzB,GAEAnD,MAWAS,EAAAd,UAAAwB,KAAA,SAAAgC,GAEA,IAAAnD,KAAAmE,MACA,MAAAnE,KAIA,IAAA6E,GAAA7E,KAAAa,KAAAiE,uBAAA,qBAEA9E,MAAAa,KAAAiE,uBAAA,sBAEA,GAAAC,UAAA,oCAEAF,EAAA,GAAAE,UAAA,kCAEA/E,KAAAmE,OAAA,CAEA,IAAAiB,GAAApF,KAAAa,IAiCA,OAhCAwE,YAAA,WACAD,EAAAlB,aAAA,uBACE,KAIFlE,KAAAiE,SAAAK,QAAA,SAAApC,GACA,GAAA+C,GAAA/C,EAAAgD,aAAA,4BAGAD,IACA/C,EAAAgC,aAAA,cAAAe,GACA/C,EAAA8C,gBAAA,8BAEA9C,EAAA8C,gBAAA,iBAMAhB,GACAA,EAAAtB,QAKAX,SAAAoD,KAAAG,oBAAA,QAAAtF,KAAAoB,gBAAA,GACAW,SAAAuD,oBAAA,UAAAtF,KAAAqB,eAGArB,KAAA4E,MAAA,OAAAzB,GAEAnD,MASAS,EAAAd,UAAA4F,QAAA,WAoBA,MAlBAvF,MAAAmB,OAGAnB,KAAAoE,SAAAE,QAAA,SAAAC,GACAA,EAAAe,oBAAA,QAAAtF,KAAAe,QACKE,KAAAjB,OAGLA,KAAAyE,SAAAH,QAAA,SAAAK,GACAA,EAAAW,oBAAA,QAAAtF,KAAAkB,QACKD,KAAAjB,OAGLA,KAAA4E,MAAA,WAGA5E,KAAAsB,cAEAtB,MASAS,EAAAd,UAAA6F,GAAA,SAAAC,EAAAC,GAOA,WANA,KAAA1F,KAAAsB,WAAAmE,KACAzF,KAAAsB,WAAAmE,OAGAzF,KAAAsB,WAAAmE,GAAAE,KAAAD,GAEA1F,MASAS,EAAAd,UAAAiG,IAAA,SAAAH,EAAAC,GACA,GAAAG,GAAA7F,KAAAsB,WAAAmE,GAAApC,QAAAqC,EAMA,OAJAG,IAAA,GACA7F,KAAAsB,WAAAmE,GAAA1B,OAAA8B,EAAA,GAGA7F,MAWAS,EAAAd,UAAAiF,MAAA,SAAAa,EAAAtC,IACAnD,KAAAsB,WAAAmE,QAEAnB,QAAA,SAAAwB,GACAA,EAAA9F,KAAAa,KAAAsC,IACKlC,KAAAjB,QAULS,EAAAd,UAAA0B,cAAA,SAAA8B,GAGAnD,KAAAmE,OAzQA,KAyQAhB,EAAA4C,QACA5C,EAAAK,iBACAxD,KAAAmB,QAKAnB,KAAAmE,OAjRA,IAiRAhB,EAAA4C,OACA7C,EAAAlD,KAAAa,KAAAsC,IAWA1C,EAAAd,UAAAyB,eAAA,SAAA+B,GAGAnD,KAAAmE,QAAAnE,KAAAa,KAAAmF,SAAA7C,EAAAjB,SACAI,EAAAtC,KAAAa,WAkHA,KAAArC,OAAA,KAAAA,EAAAD,QACAC,EAAAD,QAAAkC,GAEAC,SAEKuF,MAFLtF,EAAA,WACA,MAAAF,IACKyF,MAAA3H,EAAAmC,MAAAlC,EAAAD,QAAAoC,SAIJ,KAAAJ,GAAAH,QAED,SAAA+F,GAEAA,EAAA,6BAEAX,GAAA,yCAEA,GAAAY,GAAAD,EAAAnG,MAAAqG,QAAA,uBACAC,EAAAF,EAAAG,UAAA,sBAEAD,GAAAE,YAAA,4BAEAF,EAAAG,SAAA,4BACAL,EAAAM,SAAA,4BAEAN,EAAAO,YAAA,+BAKCC,QAQD,SAAAC,GAAwErI,EAAAD,QAAAsI,KAA6P,WAAa,GAAAC,EAA0B,gBAAA3G,GAAA4G,EAAAxH,EAAAyH,GAA0B,QAAAlH,GAAAb,EAAAgI,GAAgB,IAAA1H,EAAAN,GAAA,CAAU,IAAA8H,EAAA9H,GAAA,CAAU,GAAAiI,GAAA,kBAAAtG,KAA0C,KAAAqG,GAAAC,EAAA,MAAAtG,GAAA3B,GAAA,EAAwB,IAAAR,EAAA,MAAAA,GAAAQ,GAAA,EAAoB,IAAA4H,GAAA,GAAAM,OAAA,uBAAAlI,EAAA,IAA8C,MAAA4H,GAAAO,KAAA,mBAAAP,EAAkC,GAAAnI,GAAAa,EAAAN,IAAYV,WAAYwI,GAAA9H,GAAA,GAAAN,KAAAD,EAAAH,QAAA,SAAA4B,GAAmC,GAAAZ,GAAAwH,EAAA9H,GAAA,GAAAkB,EAAiB,OAAAL,GAAAP,GAAAY,IAAgBzB,IAAAH,QAAA4B,EAAA4G,EAAAxH,EAAAyH,GAAsB,MAAAzH,GAAAN,GAAAV,QAA8D,OAA1CE,GAAA,kBAAAmC,MAA0C3B,EAAA,EAAYA,EAAA+H,EAAAvE,OAAWxD,IAAAa,EAAAkH,EAAA/H,GAAY,OAAAa,KAAYuH,GAAA,SAAAzG,EAAApC,EAAAD,GAuB/yB,QAAA8H,GAAAiB,EAAAzF,GACA,KAAAyF,KAAAxD,WAAAyD,GAAA,CACA,qBAAAD,GAAAE,SACAF,EAAAE,QAAA3F,GACA,MAAAyF,EAEAA,KAAA3D,YA5BA,GAAA4D,GAAA,CAKA,uBAAAlF,mBAAA1C,UAAA6H,QAAA,CACA,GAAAC,GAAApF,QAAA1C,SAEA8H,GAAAD,QAAAC,EAAAC,iBACAD,EAAAE,oBACAF,EAAAG,mBACAH,EAAAI,kBACAJ,EAAAK,sBAoBAtJ,EAAAD,QAAA8H,OAEI0B,GAAA,SAAAnH,EAAApC,EAAAD,GAaJ,QAAAyJ,GAAAV,EAAAzF,EAAA4D,EAAAwC,EAAAC,GACA,GAAAC,GAAArC,EAAAI,MAAAlG,KAAAoI,UAIA,OAFAd,GAAA9C,iBAAAiB,EAAA0C,EAAAD,IAGA3C,QAAA,WACA+B,EAAAhC,oBAAAG,EAAA0C,EAAAD,KAcA,QAAApC,GAAAwB,EAAAzF,EAAA4D,EAAAwC,GACA,gBAAA9H,GACAA,EAAAkI,eAAAhC,EAAAlG,EAAA+B,OAAAL,GAEA1B,EAAAkI,gBACAJ,EAAAtJ,KAAA2I,EAAAnH,IAtCA,GAAAkG,GAAAzF,EAAA,YA2CApC,GAAAD,QAAAyJ,IAEGM,YAAA,IAAcC,GAAA,SAAA3H,EAAApC,EAAAD,GAOjBA,EAAAsC,KAAA,SAAA2H,GACA,WAAAvC,KAAAuC,GACAA,YAAAC,cACA,IAAAD,EAAA1E,UASAvF,EAAAmK,SAAA,SAAAF,GACA,GAAA/C,GAAAvG,OAAAS,UAAAgJ,SAAAhK,KAAA6J,EAEA,YAAAvC,KAAAuC,IACA,sBAAA/C,GAAA,4BAAAA,IACA,UAAA+C,KACA,IAAAA,EAAA/F,QAAAlE,EAAAsC,KAAA2H,EAAA,MASAjK,EAAAqK,OAAA,SAAAJ,GACA,sBAAAA,IACAA,YAAAK,SASAtK,EAAAuK,GAAA,SAAAN,GAGA,4BAFAtJ,OAAAS,UAAAgJ,SAAAhK,KAAA6J,SAKIO,GAAA,SAAAnI,EAAApC,EAAAD,GAaJ,QAAAyK,GAAA9G,EAAAuD,EAAAwC,GACA,IAAA/F,IAAAuD,IAAAwC,EACA,SAAAd,OAAA,6BAGA,KAAA8B,EAAAL,OAAAnD,GACA,SAAAyD,WAAA,mCAGA,KAAAD,EAAAH,GAAAb,GACA,SAAAiB,WAAA,oCAGA,IAAAD,EAAApI,KAAAqB,GACA,MAAAiH,GAAAjH,EAAAuD,EAAAwC,EAEA,IAAAgB,EAAAP,SAAAxG,GACA,MAAAkH,GAAAlH,EAAAuD,EAAAwC,EAEA,IAAAgB,EAAAL,OAAA1G,GACA,MAAAmH,GAAAnH,EAAAuD,EAAAwC,EAGA,UAAAiB,WAAA,6EAaA,QAAAC,GAAAtI,EAAA4E,EAAAwC,GAGA,MAFApH,GAAA2D,iBAAAiB,EAAAwC,IAGA1C,QAAA,WACA1E,EAAAyE,oBAAAG,EAAAwC,KAcA,QAAAmB,GAAAV,EAAAjD,EAAAwC,GAKA,MAJAvG,OAAA/B,UAAA2E,QAAA3F,KAAA+J,EAAA,SAAA7H,GACAA,EAAA2D,iBAAAiB,EAAAwC,MAIA1C,QAAA,WACA7D,MAAA/B,UAAA2E,QAAA3F,KAAA+J,EAAA,SAAA7H,GACAA,EAAAyE,oBAAAG,EAAAwC,OAeA,QAAAoB,GAAAxH,EAAA4D,EAAAwC,GACA,MAAAD,GAAAjG,SAAAoD,KAAAtD,EAAA4D,EAAAwC,GA3FA,GAAAgB,GAAArI,EAAA,QACAoH,EAAApH,EAAA,WA6FApC,GAAAD,QAAAyK,IAEGM,OAAA,EAAAtB,SAAA,IAAsBuB,GAAA,SAAA3I,EAAApC,EAAAD,GACzB,QAAAiL,GAAAlC,GACA,GAAAmC,EAEA,eAAAnC,EAAAoC,SACApC,EAAA5E,QAEA+G,EAAAnC,EAAAkB,UAEA,cAAAlB,EAAAoC,UAAA,aAAApC,EAAAoC,SAAA,CACA,GAAAC,GAAArC,EAAAsC,aAAA,WAEAD,IACArC,EAAApD,aAAA,eAGAoD,EAAAkC,SACAlC,EAAAuC,kBAAA,EAAAvC,EAAAkB,MAAA/F,QAEAkH,GACArC,EAAAtC,gBAAA,YAGAyE,EAAAnC,EAAAkB,UAEA,CACAlB,EAAAsC,aAAA,oBACAtC,EAAA5E,OAGA,IAAAoH,GAAA1J,OAAA2J,eACAC,EAAAjI,SAAAkI,aAEAD,GAAAE,mBAAA5C,GACAwC,EAAAK,kBACAL,EAAAM,SAAAJ,GAEAP,EAAAK,EAAAnB,WAGA,MAAAc,GAGAjL,EAAAD,QAAAiL,OAEIa,GAAA,SAAAzJ,EAAApC,EAAAD,GACJ,QAAA+L,MAKAA,EAAA3K,WACA6F,GAAA,SAAAzG,EAAAkJ,EAAAsC,GACA,GAAApK,GAAAH,KAAAG,IAAAH,KAAAG,KAOA,QALAA,EAAApB,KAAAoB,EAAApB,QAAA4G,MACAmD,GAAAb,EACAsC,QAGAvK,MAGAwK,KAAA,SAAAzL,EAAAkJ,EAAAsC,GAEA,QAAAzE,KACA2E,EAAA7E,IAAA7G,EAAA+G,GACAmC,EAAA/B,MAAAqE,EAAAnC,WAHA,GAAAqC,GAAAzK,IAOA,OADA8F,GAAA4E,EAAAzC,EACAjI,KAAAwF,GAAAzG,EAAA+G,EAAAyE,IAGAI,KAAA,SAAA5L,GACA,GAAA6L,MAAAjJ,MAAAhD,KAAAyJ,UAAA,GACAyC,IAAA7K,KAAAG,IAAAH,KAAAG,OAAsCpB,QAAA4C,QACtClD,EAAA,EACAqM,EAAAD,EAAApI,MAEA,KAAAhE,EAAQA,EAAAqM,EAASrM,IACjBoM,EAAApM,GAAAqK,GAAA5C,MAAA2E,EAAApM,GAAA8L,IAAAK,EAGA,OAAA5K,OAGA4F,IAAA,SAAA7G,EAAAkJ,GACA,GAAA9H,GAAAH,KAAAG,IAAAH,KAAAG,MACA4K,EAAA5K,EAAApB,GACAiM,IAEA,IAAAD,GAAA9C,EACA,OAAAxJ,GAAA,EAAAqM,EAAAC,EAAAtI,OAAoChE,EAAAqM,EAASrM,IAC7CsM,EAAAtM,GAAAqK,KAAAb,GAAA8C,EAAAtM,GAAAqK,GAAA4B,IAAAzC,GACA+C,EAAArF,KAAAoF,EAAAtM,GAYA,OAJAuM,GAAA,OACA7K,EAAApB,GAAAiM,QACA7K,GAAApB,GAEAiB,OAIAxB,EAAAD,QAAA+L,OAEIW,GAAA,SAAArK,EAAApC,EAAAD,IACJ,SAAAgC,EAAA2K,GACA,qBAAApE,MAAAqE,IACArE,GAAA,mBAAAoE,OACE,aAAA3M,EACF2M,EAAA1M,EAAAoC,EAAA,eACE,CACF,GAAAwK,IACA7M,WAEA2M,GAAAE,EAAA7K,EAAAiJ,QACAjJ,EAAA8K,gBAAAD,EAAA7M,UAECyB,KAAA,SAAAxB,EAAA8M,GACD,YAgBA,SAAAC,GAAAC,EAAAC,GACA,KAAAD,YAAAC,IACA,SAAAvC,WAAA,qCAhBA,GAAAwC,GAEA,SAAAC,GACA,MAAAA,MAAAnM,WAAAmM,GACAC,QAAAD,IAJAL,GAQAO,EAAA,kBAAAC,SAAA,gBAAAA,QAAAC,SAAA,SAAAJ,GACA,aAAAA,IACE,SAAAA,GACF,MAAAA,IAAA,kBAAAG,SAAAH,EAAAK,cAAAF,QAAAH,IAAAG,OAAAnM,UAAA,eAAAgM,IASAM,EAAA,WACA,QAAAC,GAAAhK,EAAAiK,GACA,OAAA1N,GAAA,EAAkBA,EAAA0N,EAAA1J,OAAkBhE,IAAA,CACpC,GAAA2N,GAAAD,EAAA1N,EACA2N,GAAA/M,WAAA+M,EAAA/M,aAAA,EACA+M,EAAAhN,cAAA,EACA,SAAAgN,OAAAC,UAAA,GACAnN,OAAAC,eAAA+C,EAAAkK,EAAAE,IAAAF,IAIA,gBAAAX,EAAAc,EAAAC,GAGA,MAFAD,IAAAL,EAAAT,EAAA9L,UAAA4M,GACAC,GAAAN,EAAAT,EAAAe,GACAf,MAIAgB,EAAA,WAIA,QAAAA,GAAAC,GACAnB,EAAAvL,KAAAyM,GAEAzM,KAAA2M,eAAAD,GACA1M,KAAA4M,gBAmKA,MA1JAX,GAAAQ,IACAH,IAAA,iBACA9D,MAAA,WACA,GAAAkE,GAAAtE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,KAEApI,MAAA6M,OAAAH,EAAAG,OACA7M,KAAA8M,UAAAJ,EAAAI,UACA9M,KAAA+M,QAAAL,EAAAK,QACA/M,KAAAkC,OAAAwK,EAAAxK,OACAlC,KAAAgN,KAAAN,EAAAM,KACAhN,KAAAiN,QAAAP,EAAAO,QAEAjN,KAAAyJ,aAAA,MAGA6C,IAAA,gBACA9D,MAAA,WACAxI,KAAAgN,KACAhN,KAAAkN,aACKlN,KAAAkC,QACLlC,KAAAmN,kBAIAb,IAAA,aACA9D,MAAA,WACA,GAAA4E,GAAApN,KAEAqN,EAAA,OAAAtL,SAAAuL,gBAAApI,aAAA,MAEAlF,MAAAuN,aAEAvN,KAAAwN,oBAAA,WACA,MAAAJ,GAAAG,cAEAvN,KAAAyN,YAAAzN,KAAA8M,UAAAtI,iBAAA,QAAAxE,KAAAwN,uBAAA,EAEAxN,KAAA0N,SAAA3L,SAAA4L,cAAA,YAEA3N,KAAA0N,SAAAE,MAAAC,SAAA,OAEA7N,KAAA0N,SAAAE,MAAAE,OAAA,IACA9N,KAAA0N,SAAAE,MAAAG,QAAA,IACA/N,KAAA0N,SAAAE,MAAAI,OAAA,IAEAhO,KAAA0N,SAAAE,MAAAK,SAAA,WACAjO,KAAA0N,SAAAE,MAAAP,EAAA,yBAEA,IAAAa,GAAA9N,OAAA+N,aAAApM,SAAAuL,gBAAAc,SACApO,MAAA0N,SAAAE,MAAAS,IAAAH,EAAA,KAEAlO,KAAA0N,SAAAxJ,aAAA,eACAlE,KAAA0N,SAAAlF,MAAAxI,KAAAgN,KAEAhN,KAAA8M,UAAAwB,YAAAtO,KAAA0N,UAEA1N,KAAAyJ,cAAA,EAAAiC,EAAAE,SAAA5L,KAAA0N,UACA1N,KAAAuO,cAGAjC,IAAA,aACA9D,MAAA,WACAxI,KAAAyN,cACAzN,KAAA8M,UAAAxH,oBAAA,QAAAtF,KAAAwN,qBACAxN,KAAAyN,YAAA,KACAzN,KAAAwN,oBAAA,MAGAxN,KAAA0N,WACA1N,KAAA8M,UAAA0B,YAAAxO,KAAA0N,UACA1N,KAAA0N,SAAA,SAIApB,IAAA,eACA9D,MAAA,WACAxI,KAAAyJ,cAAA,EAAAiC,EAAAE,SAAA5L,KAAAkC,QACAlC,KAAAuO,cAGAjC,IAAA,WACA9D,MAAA,WACA,GAAAiG,OAAA,EAEA,KACAA,EAAA1M,SAAA2M,YAAA1O,KAAA6M,QACK,MAAA8B,GACLF,GAAA,EAGAzO,KAAA4O,aAAAH,MAGAnC,IAAA,eACA9D,MAAA,SAAAiG,GACAzO,KAAA+M,QAAApC,KAAA8D,EAAA,mBACA5B,OAAA7M,KAAA6M,OACAG,KAAAhN,KAAAyJ,aACAwD,QAAAjN,KAAAiN,QACA4B,eAAA7O,KAAA6O,eAAA5N,KAAAjB,WAIAsM,IAAA,iBACA9D,MAAA,WACAxI,KAAAiN,SACAjN,KAAAiN,QAAAvK,QAGAtC,OAAA2J,eAAAI,qBAGAmC,IAAA,UACA9D,MAAA,WACAxI,KAAAuN,gBAGAjB,IAAA,SACAwC,IAAA,WACA,GAAAjC,GAAAzE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,SAIA,IAFApI,KAAA+O,QAAAlC,EAEA,SAAA7M,KAAA+O,SAAA,QAAA/O,KAAA+O,QACA,SAAA5H,OAAA,uDAGA7H,IAAA,WACA,MAAAU,MAAA+O,WAGAzC,IAAA,SACAwC,IAAA,SAAA5M,GACA,OAAA+D,KAAA/D,EAAA,CACA,IAAAA,GAAA,qBAAAA,EAAA,YAAA2J,EAAA3J,KAAA,IAAAA,EAAA4B,SAWA,SAAAqD,OAAA,8CAVA,aAAAnH,KAAA6M,QAAA3K,EAAA0H,aAAA,YACA,SAAAzC,OAAA,oFAGA,YAAAnH,KAAA6M,SAAA3K,EAAA0H,aAAA,aAAA1H,EAAA0H,aAAA,aACA,SAAAzC,OAAA,yGAGAnH,MAAAgP,QAAA9M,IAMA5C,IAAA,WACA,MAAAU,MAAAgP,YAIAvC,IAGAjO,GAAAD,QAAAkO,MAGGjD,OAAA,IAAWyF,GAAA,SAAArO,EAAApC,EAAAD,IACd,SAAAgC,EAAA2K,GACA,qBAAApE,MAAAqE,IACArE,GAAA,8DAAAoE,OACE,aAAA3M,EACF2M,EAAA1M,EAAAoC,EAAA,sBAAAA,EAAA,gBAAAA,EAAA,sBACE,CACF,GAAAwK,IACA7M,WAEA2M,GAAAE,EAAA7K,EAAA8K,gBAAA9K,EAAA2O,YAAA3O,EAAA4O,cACA5O,EAAA6O,UAAAhE,EAAA7M,UAECyB,KAAA,SAAAxB,EAAA6Q,EAAAC,EAAAC,GACD,YAQA,SAAAC,GAAA7D,GACA,MAAAA,MAAAnM,WAAAmM,GACAC,QAAAD,GAUA,QAAAJ,GAAAC,EAAAC,GACA,KAAAD,YAAAC,IACA,SAAAvC,WAAA,qCAsBA,QAAAuG,GAAAhF,EAAA9L,GACA,IAAA8L,EACA,SAAAiF,gBAAA,4DAGA,QAAA/Q,GAAA,gBAAAA,IAAA,kBAAAA,GAAA8L,EAAA9L,EAGA,QAAAgR,GAAAC,EAAAC,GACA,qBAAAA,IAAA,OAAAA,EACA,SAAA3G,WAAA,iEAAA2G,GAGAD,GAAAjQ,UAAAT,OAAAqC,OAAAsO,KAAAlQ,WACAqM,aACAxD,MAAAoH,EACAvQ,YAAA,EACAgN,UAAA,EACAjN,cAAA,KAGAyQ,IAAA3Q,OAAA4Q,eAAA5Q,OAAA4Q,eAAAF,EAAAC,GAAAD,EAAAG,UAAAF,GAqHA,QAAAG,GAAAC,EAAA3I,GACA,GAAA4I,GAAA,kBAAAD,CAEA,IAAA3I,EAAAsC,aAAAsG,GAIA,MAAA5I,GAAApC,aAAAgL,GA3LA,GAAAC,GAAAX,EAAAH,GAEAe,EAAAZ,EAAAF,GAEAe,EAAAb,EAAAD,GAQA1D,EAAA,kBAAAC,SAAA,gBAAAA,QAAAC,SAAA,SAAAJ,GACA,aAAAA,IACE,SAAAA,GACF,MAAAA,IAAA,kBAAAG,SAAAH,EAAAK,cAAAF,QAAAH,IAAAG,OAAAnM,UAAA,eAAAgM,IASAM,EAAA,WACA,QAAAC,GAAAhK,EAAAiK,GACA,OAAA1N,GAAA,EAAkBA,EAAA0N,EAAA1J,OAAkBhE,IAAA,CACpC,GAAA2N,GAAAD,EAAA1N,EACA2N,GAAA/M,WAAA+M,EAAA/M,aAAA,EACA+M,EAAAhN,cAAA,EACA,SAAAgN,OAAAC,UAAA,GACAnN,OAAAC,eAAA+C,EAAAkK,EAAAE,IAAAF,IAIA,gBAAAX,EAAAc,EAAAC,GAGA,MAFAD,IAAAL,EAAAT,EAAA9L,UAAA4M,GACAC,GAAAN,EAAAT,EAAAe,GACAf,MA4BAjL,EAAA,SAAA8P,GAOA,QAAA9P,GAAAyM,EAAAP,GACAnB,EAAAvL,KAAAQ,EAEA,IAAA4M,GAAAqC,EAAAzP,MAAAQ,EAAAuP,WAAA7Q,OAAAqR,eAAA/P,IAAA7B,KAAAqB,MAIA,OAFAoN,GAAAT,eAAAD,GACAU,EAAAoD,YAAAvD,GACAG,EA4FA,MAzGAuC,GAAAnP,EAAA8P,GAuBArE,EAAAzL,IACA8L,IAAA,iBACA9D,MAAA,WACA,GAAAkE,GAAAtE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,KAEApI,MAAA6M,OAAA,kBAAAH,GAAAG,OAAAH,EAAAG,OAAA7M,KAAAyQ,cACAzQ,KAAAkC,OAAA,kBAAAwK,GAAAxK,OAAAwK,EAAAxK,OAAAlC,KAAA0Q,cACA1Q,KAAAgN,KAAA,kBAAAN,GAAAM,KAAAN,EAAAM,KAAAhN,KAAA2Q,YACA3Q,KAAA8M,UAAA,WAAAjB,EAAAa,EAAAI,WAAAJ,EAAAI,UAAA/K,SAAAoD,QAGAmH,IAAA,cACA9D,MAAA,SAAAyE,GACA,GAAA2D,GAAA5Q,IAEAA,MAAA8F,UAAA,EAAAuK,EAAAzE,SAAAqB,EAAA,iBAAA9M,GACA,MAAAyQ,GAAAC,QAAA1Q,QAIAmM,IAAA,UACA9D,MAAA,SAAArI,GACA,GAAA8M,GAAA9M,EAAAkI,gBAAAlI,EAAA2Q,aAEA9Q,MAAAqL,kBACArL,KAAAqL,gBAAA,MAGArL,KAAAqL,gBAAA,GAAA8E,GAAAvE,SACAiB,OAAA7M,KAAA6M,OAAAI,GACA/K,OAAAlC,KAAAkC,OAAA+K,GACAD,KAAAhN,KAAAgN,KAAAC,GACAH,UAAA9M,KAAA8M,UACAG,UACAF,QAAA/M,UAIAsM,IAAA,gBACA9D,MAAA,SAAAyE,GACA,MAAA+C,GAAA,SAAA/C,MAGAX,IAAA,gBACA9D,MAAA,SAAAyE,GACA,GAAApL,GAAAmO,EAAA,SAAA/C,EAEA,IAAApL,EACA,MAAAE,UAAAgP,cAAAlP,MAIAyK,IAAA,cACA9D,MAAA,SAAAyE,GACA,MAAA+C,GAAA,OAAA/C,MAGAX,IAAA,UACA9D,MAAA,WACAxI,KAAA8F,SAAAP,UAEAvF,KAAAqL,kBACArL,KAAAqL,gBAAA9F,UACAvF,KAAAqL,gBAAA,WAIAiB,IAAA,cACA9D,MAAA,WACA,GAAAqE,GAAAzE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,kBAEA4I,EAAA,gBAAAnE,SACAoE,IAAAlP,SAAAmP,qBAMA,OAJAF,GAAA1M,QAAA,SAAAuI,GACAoE,OAAAlP,SAAAmP,sBAAArE,KAGAoE,MAIAzQ,GACE4P,EAAAxE,QAiBFpN,GAAAD,QAAAiC,MAGG2Q,qBAAA,EAAAC,gBAAA,EAAAC,eAAA,SAA+D,SAGlE,SAAAlL,GAEAA,EAAA,kDAAAmL,KAAA,SAAA7S,GACA,GAAA4F,GAAA,oBAAA5F,EACA8S,EAAA,sDAAAlN,EAAA,iBAEA8B,GAAAnG,MAAAwR,KAAA,gDACArL,EAAAnG,MAAAyR,KAAA,KAAApN,GAAAqN,MAAAH,KAGApL,EAAApE,UAAA4P,MAAA,WAiBA,QAAAC,GAAAzR,EAAA0R,GACA1L,EAAAhG,GAAAuG,SAAA,eACAP,EAAAhG,GAAAsR,KAAA,aAAAI,GACA1L,EAAAhG,GAAAsR,KAAA,eAAAI,GAnBA,GAAAC,GAAA3L,EAAA,2BACAiJ,EAAA,GAAA5O,GAAA,0BAEAsR,GAAArP,SAEA2M,EAAA5J,GAAA,mBAAArF,GACAA,EAAA0O,iBACA+C,EAAAzR,EAAA8M,QAAA,aAGA6E,EAAAC,WAAA,WACA5L,EAAAnG,MAAA2G,YAAA,eACAR,EAAAnG,MAAAgS,WAAA,cACA7L,EAAAnG,MAAAgS,WAAA,sBAaCpL,QAED,SAAAT,GAGA,YAGA,iBAAA/F,QAAA6R,MACA7R,OAAA6R,QAGAA,IAAAC,aAAA,WAEA,QAAAC,GAAAC,GACA,GAAAC,GAAAlM,EAAA,2BAEAiM,KACAC,IAAAC,IAAAF,IAGAC,EAAA1L,YAAA,QAGAR,EAAA,QAAAoM,MAAA,SAAApS,GACA,GAAAqS,GAAArM,EAAAhG,EAAA+B,QACAuQ,EAAAD,EAAAnM,QAAA,gBAEA,IAAAoM,EAAAhQ,OACA0P,IACIK,EAAAvJ,GAAA,OACJ9I,EAAAqD,iBAEA2O,EAAAM,GAEAA,EAAAjM,YAAA,YAOAyL,IAAAC,gBAECtL,QAED,SAAAT,GAGA,YAGA,iBAAA/F,QAAA6R,MACA7R,OAAA6R,QAGAlQ,SAAAyC,iBAAA,8BACA,GAAAkO,GAAAvM,EAAA,YAGAA,GAAA,eAAAmL,KAAA,WACA,GAAA7Q,GAAAT,KAAA0S,QAKC9L,QAED,SAAAT,GAEAA,EAAA,qDAAAwM,MAAA,KAAAC,QAAA,QAEAzM,EAAA,kCAAAoM,MAAA,SAAApS,GAKA,MAJAA,GAAAqD,iBAEA2C,EAAAnG,MAAA6S,OAAA,eAAAC,OAAAF,QAAA,SAEA,KAGChM,QAED,SAAAT,GAGA,YAGA,iBAAA/F,QAAA6R,MACA7R,OAAA6R,QAGAA,IAAAc,iBAAA,WAEA5M,EAAA,kCAAAmL,KAAA,WACA,GAAAkB,GAAArM,EAAAnG,MACAgT,EAAAR,EAAAS,KAAA,0BACAC,EAAAV,EAAAS,KAAA,uBAEAC,GAAA1N,GAAA,mBACA,GAAA2N,GAAA,GACAC,EAAA,EAEAjN,GAAAnG,MAAAwG,YAAA,cAEAwM,EAAAvM,SAAA,eACAuM,EAAArM,YAAA,cAAAD,SAAA,aACAyM,EAAA,WACAD,EAAAD,KAAA,6BAAAjG,KAAA,iBACAkG,EAAAD,KAAA,OAAAtM,YAAA,oBAAAD,SAAA,iBAEAsM,EAAArM,YAAA,aAAAD,SAAA,cACAyM,EAAA,OACAD,EAAAD,KAAA,6BAAAjG,KAAA,iBACAkG,EAAAD,KAAA,OAAAtM,YAAA,eAAAD,SAAA,qBAGA0M,EAAAjN,EAAA,eAAAgN,EAAA,OACA1B,KAAA,KAAAuB,EAAAvB,KAAA,OACAA,KAAA,OAAAuB,EAAAvB,KAAA,SACAA,KAAA,QAAAuB,EAAAvB,KAAA,UACA4B,IAAAL,EAAAK,OACAC,aAAAN,GAEAA,EAAAO,SACAP,EAAAI,EACAJ,EAAAtQ,aAQAuP,IAAAc,oBAECnM,QAED,SAAAT,GAEAqN,gBAAA,SAAAC,GACA,GACAC,IADAvN,EAAAsN,GAAAR,KAAA,yBACA9M,EAAAsN,GAAA7I,KAAA,UAEA+I,EAAA,EAAAC,KAAAC,GADA,GAEAC,EAAAH,EAAA,IAAAD,EACAK,EAAA,IAAAD,EAAAJ,EACAM,EACA,6LAEAD,EAAA,sDAEAL,EAAA,WAGAvN,GAAAsN,GAAAQ,QAAAD,GAAAtN,SAAA,UAAAuM,KAAA,qBAAAiB,IAAA,kBAAAR,EAAA,iBAGAvN,EAAA,gCAAAmL,KAAA,WACAkC,gBAAAxT,SAGC4G,QAED,SAAAT,GAEAgO,UAAA,SAAAV,GAaA,QAAAW,KACAC,EAAA7C,KAAA,kCACA6C,EAAAlT,OAEAqQ,EAAA6C,EAAAxB,SACAyB,EAAAnO,EAAA,iGAAAoO,UAAA/C,GACAgD,EAAArO,EAAA,6CAAAsO,SAAAjD,GACAhJ,EAAArC,EAAA,wCAA6CsO,SAAAD,GAC7CE,EAAAvO,EAAA,kCAAAsO,SAAAD,GAEAhD,EAAA9K,SAAA2N,EAAA5C,KAAA,UAKA,QAAAkD,KACAN,EAAA7O,GAAA,wBAGAoP,IACAF,EAAAzB,KAAA,MAAAX,IAAA,mBAAA9M,GAAA,iBAAAqP,GAEAC,EADA3O,EAAA0O,EAAA3S,SACA,GACA6S,QAMA,QAAAH,KACAF,EAAAM,QACAX,EAAApB,KAAA,YAAAxQ,OACA4R,EAAApB,KAAA,YAAA3B,KAAA,WACA,GACA2D,GADAC,EAAA/O,EAAAnG,KAEAiV,GAAA9O,EAAA,aAAAsO,SAAAC,GACAS,OAAAhP,EAAA,oCAAA6G,KAAAkI,EAAAE,KAAA,UAEAH,EAAAI,KAAAF,QACAF,EAAAvO,SAAA,YAEAwO,EAAAjC,KAAA,UAAA3B,KAAA,WACA,GACAgE,GADAC,EAAApP,EAAAnG,KAEAsV,GAAAnP,EAAA,aAAAsO,SAAAQ,GACAK,EAAAtI,KAAAuI,EAAAvI,QACAsI,EAAA1K,KAAA,QAAA2K,EAAAlC,OAEAkC,EAAAlC,OAAAgB,EAAAhB,OACAyB,EAAAQ,OAKAjB,EAAApB,KAAA,UAAA3B,KAAA,WACA,GACAgE,GADAC,EAAApP,EAAAnG,KAEAsV,GAAAnP,EAAA,aAAAsO,SAAAC,GACAY,EAAAtI,KAAAuI,EAAAvI,QACAsI,EAAA1K,KAAA,QAAA2K,EAAAlC,OAEAkC,EAAAlC,OAAAgB,EAAAhB,OACAyB,EAAAQ,GAAA,KAQA,QAAAP,KACA,GAAA1B,GAAAgB,EAAA,GAAA7L,KAGA6K,GAAAmC,MAAA,kBACApV,OAAAqV,SAAAC,KAAArC,GAKA,QAAAsC,KACAnE,EAAAyB,KAAA,UAAAhK,GAAA,eAGAuI,EAAA/K,SAAA,UAGAmP,IAFAC,KAOA,QAAAD,GAAAN,GACAA,IACAA,EAAA9D,GAGA8D,EAAA3O,YAAA,UACA2O,EAAAjP,QAAA,MAAAM,YAAA,eAIA,QAAAkP,KACA1P,EAAA,4BAAAmL,KAAA,WACAsE,EAAAzP,EAAAnG,SAGAwR,EAAA9K,SAAA,UACA8K,EAAAnL,QAAA,MAAAK,SAAA,eAIA,QAAAoO,GAAAS,EAAAO,GACAA,MAAA,KAAAA,KACAtN,EAAAwE,KAAAuI,EAAAvI,QACA7G,EAAA,WAAAuO,GAAA/N,YAAA,WACA4O,EAAA7O,SAAA,WACAkP,IAGAvB,EAAAhB,IAAAkC,EAAA3K,KAAA,UAEAkL,GACAzB,EAAApH,QAAA,UAvIA,GACAuE,GAAA8C,EAAAE,EAAAhM,EAAAkM,EADAL,EAAAlO,EAAAsN,EAGA,IAAAY,EAAApL,GAAA,aAIAoL,EAAAhO,QAAA,qBAAA5D,QAAA4R,EAAAzJ,KAAA,YAAAyJ,EAAApL,GAAA,cAqLA,MA/CA,YACA,GAAA8M,EAEA3B,KACAQ,IACAD,IAEAD,EAAAzB,KAAA,MAAAX,IAAA,mBAAA9M,GAAA,iBAAAqP,GAEAC,EADA3O,EAAA0O,EAAA3S,SACA,GACA6S,MAGAT,EAAA9O,GAAA,QAAAmQ,GACAnN,EAAAhD,GAAA,QAAAmQ,GACAtB,EAAA7O,GAAA,QAAAqQ,GAEA1P,EAAApE,UAAAwQ,MAAA,SAAAsC,GACA,GACAkB,GADA1B,EAAAlO,EAAA0O,EAAA3S,OAGAmS,GAAAhO,QAAA,qBAAA5D,QAIA4R,EAAApL,GAAA,UAAAoL,EAAA5C,KAAA,SACAsE,EAAA1B,EAAA5C,KAAA,OAEAtL,EAAA,UAAA4P,GAAAtT,SAKAmT,MAGAG,EAAA1B,EAAA5C,KAAA,MAEAsE,GACA5P,EAAA,aAAA4P,EAAA,KAAAvQ,GAAA,QAAAqQ,GAGAxB,EAAA3N,SAAA,iBAKA1G,MAIAmG,EAAA,qBAAAmL,KAAA,WACA6C,UAAAnU,SAGC4G,QAED,SAAAT,GAEA6P,QAAA,SAAAvC,GAQA,QAAAwC,KACA7V,OAAAiF,WAAA6Q,EAAA,IAIA,QAAAA,KACA,GAAAC,GAAA9B,EAAApB,KAAA,4BAAAJ,SACAuD,EAAAD,EAAAlD,KAAA,mBAEAoB,GAAAgC,OAAAD,EAAAE,cAAAH,EAAAG,cAAA,GAIA,QAAAC,KACA,GAAAJ,GAAA9B,EAAApB,KAAA,2BAEAoB,GAAApB,KAAA,yBAAAtM,YAAA,UACAwP,EAAAtD,SAAAI,KAAA,SAAAvM,SAAA,UAEAuP,IAIA,QAAAO,KACA,GAAAC,GACAC,EAAAtW,OAAAqV,SAAAkB,KAAAC,QAAA,cAEAF,KACAD,EAAApC,EAAApB,KAAA,SAAAyD,GAEAD,EAAA5D,SAAAI,KAAA,SAAAxQ,SACA4R,EAAApB,KAAA,yBAAAtM,YAAA,UACA8P,EAAA5D,SAAAI,KAAA,SAAAvM,SAAA,UAEA+P,EAAAhU,SAAAgU,EAAArB,KAAA,aACAqB,EAAArB,KAAA,cAEAyB,OAUA,QAAAA,KACAZ,IAEA9P,EAAA,cAAAiI,UACAiG,EAAAyC,SAAAzI,IACA0I,SAAA5Q,EAAA,QAAA+N,IAAA,eACA,IA5DA,GAAAG,GAAAlO,EAAAsN,GAAApN,QAAA,YAEA,IAAAgO,EAAA5R,OAgFA,MAjBA,YACA,GAAA0T,GAAA9B,EAAApB,KAAA,2BAEAoB,GAAA7O,GAAA,uCAAA+Q,GACApQ,EAAA/F,QAAAoF,GAAA,aAAAgR,GACAL,EAAAtD,SAAAI,KAAA,SAAAvM,SAAA,UAEAuP,IACAO,OAKArQ,EAAA/F,QAAA4W,OAAA,WACAf,MAGAjW,MAIAmG,EAAA,wBAAAmL,KAAA,WACA0E,QAAAhW,SAGC4G,QAED,SAAAT,GAGA,YAGA,iBAAA/F,QAAA6R,MACA7R,OAAA6R,QAGAA,IAAAgF,OAAA,WAEA9Q,EAAA,mDAAAX,GAAA,kBAAArF,GACA,GAAA+W,GAAA/Q,EAAAnG,MAAA,GAAAmX,MAAA,GACAC,EAAAjR,EAAAnG,MAAAiT,KAAA,wBAEAiE,IACAE,EAAApK,KAAAkK,EAAAnY,SAOAkT,IAAAgF,UAECrQ,UJ8G4BjI,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,KAIzG,SAAUI,EAAQD,EAASH,GAEjC,GAAIwC,GKp1DJA,GAMA,SAAAiG,GAAwErI,EAAAD,QAAAsI,KAA6P,WAAa,GAAAC,EAA0B,gBAAA3G,GAAA4G,EAAAxH,EAAAyH,GAA0B,QAAAlH,GAAAb,EAAAgI,GAAgB,IAAA1H,EAAAN,GAAA,CAAU,IAAA8H,EAAA9H,GAAA,CAAU,GAAAiI,GAAA,kBAAAtG,KAA0C,KAAAqG,GAAAC,EAAA,MAAAtG,GAAA3B,GAAA,EAAwB,IAAAR,EAAA,MAAAA,GAAAQ,GAAA,EAAoB,IAAA4H,GAAA,GAAAM,OAAA,uBAAAlI,EAAA,IAA8C,MAAA4H,GAAAO,KAAA,mBAAAP,EAAkC,GAAAnI,GAAAa,EAAAN,IAAYV,WAAYwI,GAAA9H,GAAA,GAAAN,KAAAD,EAAAH,QAAA,SAAA4B,GAAmC,GAAAZ,GAAAwH,EAAA9H,GAAA,GAAAkB,EAAiB,OAAAL,GAAAP,GAAAY,IAAgBzB,IAAAH,QAAA4B,EAAA4G,EAAAxH,EAAAyH,GAAsB,MAAAzH,GAAAN,GAAAV,QAA8D,OAA1CE,GAAA,kBAAAmC,MAA0C3B,EAAA,EAAYA,EAAA+H,EAAAvE,OAAWxD,IAAAa,EAAAkH,EAAA/H,GAAY,OAAAa,KAAYuH,GAAA,SAAAzG,EAAApC,EAAAD,GAuB/yB,QAAA8H,GAAAiB,EAAAzF,GACA,KAAAyF,KAAAxD,WAAAyD,GAAA,CACA,qBAAAD,GAAAE,SACAF,EAAAE,QAAA3F,GACA,MAAAyF,EAEAA,KAAA3D,YA5BA,GAAA4D,GAAA,CAKA,uBAAAlF,mBAAA1C,UAAA6H,QAAA,CACA,GAAAC,GAAApF,QAAA1C,SAEA8H,GAAAD,QAAAC,EAAAC,iBACAD,EAAAE,oBACAF,EAAAG,mBACAH,EAAAI,kBACAJ,EAAAK,sBAoBAtJ,EAAAD,QAAA8H,OAEI0B,GAAA,SAAAnH,EAAApC,EAAAD,GAaJ,QAAAyJ,GAAAV,EAAAzF,EAAA4D,EAAAwC,EAAAC,GACA,GAAAC,GAAArC,EAAAI,MAAAlG,KAAAoI,UAIA,OAFAd,GAAA9C,iBAAAiB,EAAA0C,EAAAD,IAGA3C,QAAA,WACA+B,EAAAhC,oBAAAG,EAAA0C,EAAAD,KAcA,QAAApC,GAAAwB,EAAAzF,EAAA4D,EAAAwC,GACA,gBAAA9H,GACAA,EAAAkI,eAAAhC,EAAAlG,EAAA+B,OAAAL,GAEA1B,EAAAkI,gBACAJ,EAAAtJ,KAAA2I,EAAAnH,IAtCA,GAAAkG,GAAAzF,EAAA,YA2CApC,GAAAD,QAAAyJ,IAEGM,YAAA,IAAcC,GAAA,SAAA3H,EAAApC,EAAAD,GAOjBA,EAAAsC,KAAA,SAAA2H,GACA,WAAAvC,KAAAuC,GACAA,YAAAC,cACA,IAAAD,EAAA1E,UASAvF,EAAAmK,SAAA,SAAAF,GACA,GAAA/C,GAAAvG,OAAAS,UAAAgJ,SAAAhK,KAAA6J,EAEA,YAAAvC,KAAAuC,IACA,sBAAA/C,GAAA,4BAAAA,IACA,UAAA+C,KACA,IAAAA,EAAA/F,QAAAlE,EAAAsC,KAAA2H,EAAA,MASAjK,EAAAqK,OAAA,SAAAJ,GACA,sBAAAA,IACAA,YAAAK,SASAtK,EAAAuK,GAAA,SAAAN,GAGA,4BAFAtJ,OAAAS,UAAAgJ,SAAAhK,KAAA6J,SAKIO,GAAA,SAAAnI,EAAApC,EAAAD,GAaJ,QAAAyK,GAAA9G,EAAAuD,EAAAwC,GACA,IAAA/F,IAAAuD,IAAAwC,EACA,SAAAd,OAAA,6BAGA,KAAA8B,EAAAL,OAAAnD,GACA,SAAAyD,WAAA,mCAGA,KAAAD,EAAAH,GAAAb,GACA,SAAAiB,WAAA,oCAGA,IAAAD,EAAApI,KAAAqB,GACA,MAAAiH,GAAAjH,EAAAuD,EAAAwC,EAEA,IAAAgB,EAAAP,SAAAxG,GACA,MAAAkH,GAAAlH,EAAAuD,EAAAwC,EAEA,IAAAgB,EAAAL,OAAA1G,GACA,MAAAmH,GAAAnH,EAAAuD,EAAAwC,EAGA,UAAAiB,WAAA,6EAaA,QAAAC,GAAAtI,EAAA4E,EAAAwC,GAGA,MAFApH,GAAA2D,iBAAAiB,EAAAwC,IAGA1C,QAAA,WACA1E,EAAAyE,oBAAAG,EAAAwC,KAcA,QAAAmB,GAAAV,EAAAjD,EAAAwC,GAKA,MAJAvG,OAAA/B,UAAA2E,QAAA3F,KAAA+J,EAAA,SAAA7H,GACAA,EAAA2D,iBAAAiB,EAAAwC,MAIA1C,QAAA,WACA7D,MAAA/B,UAAA2E,QAAA3F,KAAA+J,EAAA,SAAA7H,GACAA,EAAAyE,oBAAAG,EAAAwC,OAeA,QAAAoB,GAAAxH,EAAA4D,EAAAwC,GACA,MAAAD,GAAAjG,SAAAoD,KAAAtD,EAAA4D,EAAAwC,GA3FA,GAAAgB,GAAArI,EAAA,QACAoH,EAAApH,EAAA,WA6FApC,GAAAD,QAAAyK,IAEGM,OAAA,EAAAtB,SAAA,IAAsBuB,GAAA,SAAA3I,EAAApC,EAAAD,GACzB,QAAAiL,GAAAlC,GACA,GAAAmC,EAEA,eAAAnC,EAAAoC,SACApC,EAAA5E,QAEA+G,EAAAnC,EAAAkB,UAEA,cAAAlB,EAAAoC,UAAA,aAAApC,EAAAoC,SAAA,CACA,GAAAC,GAAArC,EAAAsC,aAAA,WAEAD,IACArC,EAAApD,aAAA,eAGAoD,EAAAkC,SACAlC,EAAAuC,kBAAA,EAAAvC,EAAAkB,MAAA/F,QAEAkH,GACArC,EAAAtC,gBAAA,YAGAyE,EAAAnC,EAAAkB,UAEA,CACAlB,EAAAsC,aAAA,oBACAtC,EAAA5E,OAGA,IAAAoH,GAAA1J,OAAA2J,eACAC,EAAAjI,SAAAkI,aAEAD,GAAAE,mBAAA5C,GACAwC,EAAAK,kBACAL,EAAAM,SAAAJ,GAEAP,EAAAK,EAAAnB,WAGA,MAAAc,GAGAjL,EAAAD,QAAAiL,OAEIa,GAAA,SAAAzJ,EAAApC,EAAAD,GACJ,QAAA+L,MAKAA,EAAA3K,WACA6F,GAAA,SAAAzG,EAAAkJ,EAAAsC,GACA,GAAApK,GAAAH,KAAAG,IAAAH,KAAAG,KAOA,QALAA,EAAApB,KAAAoB,EAAApB,QAAA4G,MACAmD,GAAAb,EACAsC,QAGAvK,MAGAwK,KAAA,SAAAzL,EAAAkJ,EAAAsC,GAEA,QAAAzE,KACA2E,EAAA7E,IAAA7G,EAAA+G,GACAmC,EAAA/B,MAAAqE,EAAAnC,WAHA,GAAAqC,GAAAzK,IAOA,OADA8F,GAAA4E,EAAAzC,EACAjI,KAAAwF,GAAAzG,EAAA+G,EAAAyE,IAGAI,KAAA,SAAA5L,GACA,GAAA6L,MAAAjJ,MAAAhD,KAAAyJ,UAAA,GACAyC,IAAA7K,KAAAG,IAAAH,KAAAG,OAAsCpB,QAAA4C,QACtClD,EAAA,EACAqM,EAAAD,EAAApI,MAEA,KAAAhE,EAAQA,EAAAqM,EAASrM,IACjBoM,EAAApM,GAAAqK,GAAA5C,MAAA2E,EAAApM,GAAA8L,IAAAK,EAGA,OAAA5K,OAGA4F,IAAA,SAAA7G,EAAAkJ,GACA,GAAA9H,GAAAH,KAAAG,IAAAH,KAAAG,MACA4K,EAAA5K,EAAApB,GACAiM,IAEA,IAAAD,GAAA9C,EACA,OAAAxJ,GAAA,EAAAqM,EAAAC,EAAAtI,OAAoChE,EAAAqM,EAASrM,IAC7CsM,EAAAtM,GAAAqK,KAAAb,GAAA8C,EAAAtM,GAAAqK,GAAA4B,IAAAzC,GACA+C,EAAArF,KAAAoF,EAAAtM,GAYA,OAJAuM,GAAA,OACA7K,EAAApB,GAAAiM,QACA7K,GAAApB,GAEAiB,OAIAxB,EAAAD,QAAA+L,OAEIW,GAAA,SAAArK,EAAApC,EAAAD,IACJ,SAAAgC,EAAA2K,GACA,qBAAApE,MAAAqE,IACArE,GAAA,mBAAAoE,OACE,aAAA3M,EACF2M,EAAA1M,EAAAoC,EAAA,eACE,CACF,GAAAwK,IACA7M,WAEA2M,GAAAE,EAAA7K,EAAAiJ,QACAjJ,EAAA8K,gBAAAD,EAAA7M,UAECyB,KAAA,SAAAxB,EAAA8M,GACD,YAgBA,SAAAC,GAAAC,EAAAC,GACA,KAAAD,YAAAC,IACA,SAAAvC,WAAA,qCAhBA,GAAAwC,GAEA,SAAAC,GACA,MAAAA,MAAAnM,WAAAmM,GACAC,QAAAD,IAJAL,GAQAO,EAAA,kBAAAC,SAAA,gBAAAA,QAAAC,SAAA,SAAAJ,GACA,aAAAA,IACE,SAAAA,GACF,MAAAA,IAAA,kBAAAG,SAAAH,EAAAK,cAAAF,QAAAH,IAAAG,OAAAnM,UAAA,eAAAgM,IASAM,EAAA,WACA,QAAAC,GAAAhK,EAAAiK,GACA,OAAA1N,GAAA,EAAkBA,EAAA0N,EAAA1J,OAAkBhE,IAAA,CACpC,GAAA2N,GAAAD,EAAA1N,EACA2N,GAAA/M,WAAA+M,EAAA/M,aAAA,EACA+M,EAAAhN,cAAA,EACA,SAAAgN,OAAAC,UAAA,GACAnN,OAAAC,eAAA+C,EAAAkK,EAAAE,IAAAF,IAIA,gBAAAX,EAAAc,EAAAC,GAGA,MAFAD,IAAAL,EAAAT,EAAA9L,UAAA4M,GACAC,GAAAN,EAAAT,EAAAe,GACAf,MAIAgB,EAAA,WAIA,QAAAA,GAAAC,GACAnB,EAAAvL,KAAAyM,GAEAzM,KAAA2M,eAAAD,GACA1M,KAAA4M,gBAmKA,MA1JAX,GAAAQ,IACAH,IAAA,iBACA9D,MAAA,WACA,GAAAkE,GAAAtE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,KAEApI,MAAA6M,OAAAH,EAAAG,OACA7M,KAAA8M,UAAAJ,EAAAI,UACA9M,KAAA+M,QAAAL,EAAAK,QACA/M,KAAAkC,OAAAwK,EAAAxK,OACAlC,KAAAgN,KAAAN,EAAAM,KACAhN,KAAAiN,QAAAP,EAAAO,QAEAjN,KAAAyJ,aAAA,MAGA6C,IAAA,gBACA9D,MAAA,WACAxI,KAAAgN,KACAhN,KAAAkN,aACKlN,KAAAkC,QACLlC,KAAAmN,kBAIAb,IAAA,aACA9D,MAAA,WACA,GAAA4E,GAAApN,KAEAqN,EAAA,OAAAtL,SAAAuL,gBAAApI,aAAA,MAEAlF,MAAAuN,aAEAvN,KAAAwN,oBAAA,WACA,MAAAJ,GAAAG,cAEAvN,KAAAyN,YAAAzN,KAAA8M,UAAAtI,iBAAA,QAAAxE,KAAAwN,uBAAA,EAEAxN,KAAA0N,SAAA3L,SAAA4L,cAAA,YAEA3N,KAAA0N,SAAAE,MAAAC,SAAA,OAEA7N,KAAA0N,SAAAE,MAAAE,OAAA,IACA9N,KAAA0N,SAAAE,MAAAG,QAAA,IACA/N,KAAA0N,SAAAE,MAAAI,OAAA,IAEAhO,KAAA0N,SAAAE,MAAAK,SAAA,WACAjO,KAAA0N,SAAAE,MAAAP,EAAA,yBAEA,IAAAa,GAAA9N,OAAA+N,aAAApM,SAAAuL,gBAAAc,SACApO,MAAA0N,SAAAE,MAAAS,IAAAH,EAAA,KAEAlO,KAAA0N,SAAAxJ,aAAA,eACAlE,KAAA0N,SAAAlF,MAAAxI,KAAAgN,KAEAhN,KAAA8M,UAAAwB,YAAAtO,KAAA0N,UAEA1N,KAAAyJ,cAAA,EAAAiC,EAAAE,SAAA5L,KAAA0N,UACA1N,KAAAuO,cAGAjC,IAAA,aACA9D,MAAA,WACAxI,KAAAyN,cACAzN,KAAA8M,UAAAxH,oBAAA,QAAAtF,KAAAwN,qBACAxN,KAAAyN,YAAA,KACAzN,KAAAwN,oBAAA,MAGAxN,KAAA0N,WACA1N,KAAA8M,UAAA0B,YAAAxO,KAAA0N,UACA1N,KAAA0N,SAAA,SAIApB,IAAA,eACA9D,MAAA,WACAxI,KAAAyJ,cAAA,EAAAiC,EAAAE,SAAA5L,KAAAkC,QACAlC,KAAAuO,cAGAjC,IAAA,WACA9D,MAAA,WACA,GAAAiG,OAAA,EAEA,KACAA,EAAA1M,SAAA2M,YAAA1O,KAAA6M,QACK,MAAA8B,GACLF,GAAA,EAGAzO,KAAA4O,aAAAH,MAGAnC,IAAA,eACA9D,MAAA,SAAAiG,GACAzO,KAAA+M,QAAApC,KAAA8D,EAAA,mBACA5B,OAAA7M,KAAA6M,OACAG,KAAAhN,KAAAyJ,aACAwD,QAAAjN,KAAAiN,QACA4B,eAAA7O,KAAA6O,eAAA5N,KAAAjB,WAIAsM,IAAA,iBACA9D,MAAA,WACAxI,KAAAiN,SACAjN,KAAAiN,QAAAvK,QAGAtC,OAAA2J,eAAAI,qBAGAmC,IAAA,UACA9D,MAAA,WACAxI,KAAAuN,gBAGAjB,IAAA,SACAwC,IAAA,WACA,GAAAjC,GAAAzE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,SAIA,IAFApI,KAAA+O,QAAAlC,EAEA,SAAA7M,KAAA+O,SAAA,QAAA/O,KAAA+O,QACA,SAAA5H,OAAA,uDAGA7H,IAAA,WACA,MAAAU,MAAA+O,WAGAzC,IAAA,SACAwC,IAAA,SAAA5M,GACA,OAAA+D,KAAA/D,EAAA,CACA,IAAAA,GAAA,qBAAAA,EAAA,YAAA2J,EAAA3J,KAAA,IAAAA,EAAA4B,SAWA,SAAAqD,OAAA,8CAVA,aAAAnH,KAAA6M,QAAA3K,EAAA0H,aAAA,YACA,SAAAzC,OAAA,oFAGA,YAAAnH,KAAA6M,SAAA3K,EAAA0H,aAAA,aAAA1H,EAAA0H,aAAA,aACA,SAAAzC,OAAA,yGAGAnH,MAAAgP,QAAA9M,IAMA5C,IAAA,WACA,MAAAU,MAAAgP,YAIAvC,IAGAjO,GAAAD,QAAAkO,MAGGjD,OAAA,IAAWyF,GAAA,SAAArO,EAAApC,EAAAD,IACd,SAAAgC,EAAA2K,GACA,qBAAApE,MAAAqE,IACArE,GAAA,8DAAAoE,OACE,aAAA3M,EACF2M,EAAA1M,EAAAoC,EAAA,sBAAAA,EAAA,gBAAAA,EAAA,sBACE,CACF,GAAAwK,IACA7M,WAEA2M,GAAAE,EAAA7K,EAAA8K,gBAAA9K,EAAA2O,YAAA3O,EAAA4O,cACA5O,EAAA6O,UAAAhE,EAAA7M,UAECyB,KAAA,SAAAxB,EAAA6Q,EAAAC,EAAAC,GACD,YAQA,SAAAC,GAAA7D,GACA,MAAAA,MAAAnM,WAAAmM,GACAC,QAAAD,GAUA,QAAAJ,GAAAC,EAAAC,GACA,KAAAD,YAAAC,IACA,SAAAvC,WAAA,qCAsBA,QAAAuG,GAAAhF,EAAA9L,GACA,IAAA8L,EACA,SAAAiF,gBAAA,4DAGA,QAAA/Q,GAAA,gBAAAA,IAAA,kBAAAA,GAAA8L,EAAA9L,EAGA,QAAAgR,GAAAC,EAAAC,GACA,qBAAAA,IAAA,OAAAA,EACA,SAAA3G,WAAA,iEAAA2G,GAGAD,GAAAjQ,UAAAT,OAAAqC,OAAAsO,KAAAlQ,WACAqM,aACAxD,MAAAoH,EACAvQ,YAAA,EACAgN,UAAA,EACAjN,cAAA,KAGAyQ,IAAA3Q,OAAA4Q,eAAA5Q,OAAA4Q,eAAAF,EAAAC,GAAAD,EAAAG,UAAAF,GAqHA,QAAAG,GAAAC,EAAA3I,GACA,GAAA4I,GAAA,kBAAAD,CAEA,IAAA3I,EAAAsC,aAAAsG,GAIA,MAAA5I,GAAApC,aAAAgL,GA3LA,GAAAC,GAAAX,EAAAH,GAEAe,EAAAZ,EAAAF,GAEAe,EAAAb,EAAAD,GAQA1D,EAAA,kBAAAC,SAAA,gBAAAA,QAAAC,SAAA,SAAAJ,GACA,aAAAA,IACE,SAAAA,GACF,MAAAA,IAAA,kBAAAG,SAAAH,EAAAK,cAAAF,QAAAH,IAAAG,OAAAnM,UAAA,eAAAgM,IASAM,EAAA,WACA,QAAAC,GAAAhK,EAAAiK,GACA,OAAA1N,GAAA,EAAkBA,EAAA0N,EAAA1J,OAAkBhE,IAAA,CACpC,GAAA2N,GAAAD,EAAA1N,EACA2N,GAAA/M,WAAA+M,EAAA/M,aAAA,EACA+M,EAAAhN,cAAA,EACA,SAAAgN,OAAAC,UAAA,GACAnN,OAAAC,eAAA+C,EAAAkK,EAAAE,IAAAF,IAIA,gBAAAX,EAAAc,EAAAC,GAGA,MAFAD,IAAAL,EAAAT,EAAA9L,UAAA4M,GACAC,GAAAN,EAAAT,EAAAe,GACAf,MA4BAjL,EAAA,SAAA8P,GAOA,QAAA9P,GAAAyM,EAAAP,GACAnB,EAAAvL,KAAAQ,EAEA,IAAA4M,GAAAqC,EAAAzP,MAAAQ,EAAAuP,WAAA7Q,OAAAqR,eAAA/P,IAAA7B,KAAAqB,MAIA,OAFAoN,GAAAT,eAAAD,GACAU,EAAAoD,YAAAvD,GACAG,EA4FA,MAzGAuC,GAAAnP,EAAA8P,GAuBArE,EAAAzL,IACA8L,IAAA,iBACA9D,MAAA,WACA,GAAAkE,GAAAtE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,KAEApI,MAAA6M,OAAA,kBAAAH,GAAAG,OAAAH,EAAAG,OAAA7M,KAAAyQ,cACAzQ,KAAAkC,OAAA,kBAAAwK,GAAAxK,OAAAwK,EAAAxK,OAAAlC,KAAA0Q,cACA1Q,KAAAgN,KAAA,kBAAAN,GAAAM,KAAAN,EAAAM,KAAAhN,KAAA2Q,YACA3Q,KAAA8M,UAAA,WAAAjB,EAAAa,EAAAI,WAAAJ,EAAAI,UAAA/K,SAAAoD,QAGAmH,IAAA,cACA9D,MAAA,SAAAyE,GACA,GAAA2D,GAAA5Q,IAEAA,MAAA8F,UAAA,EAAAuK,EAAAzE,SAAAqB,EAAA,iBAAA9M,GACA,MAAAyQ,GAAAC,QAAA1Q,QAIAmM,IAAA,UACA9D,MAAA,SAAArI,GACA,GAAA8M,GAAA9M,EAAAkI,gBAAAlI,EAAA2Q,aAEA9Q,MAAAqL,kBACArL,KAAAqL,gBAAA,MAGArL,KAAAqL,gBAAA,GAAA8E,GAAAvE,SACAiB,OAAA7M,KAAA6M,OAAAI,GACA/K,OAAAlC,KAAAkC,OAAA+K,GACAD,KAAAhN,KAAAgN,KAAAC,GACAH,UAAA9M,KAAA8M,UACAG,UACAF,QAAA/M,UAIAsM,IAAA,gBACA9D,MAAA,SAAAyE,GACA,MAAA+C,GAAA,SAAA/C,MAGAX,IAAA,gBACA9D,MAAA,SAAAyE,GACA,GAAApL,GAAAmO,EAAA,SAAA/C,EAEA,IAAApL,EACA,MAAAE,UAAAgP,cAAAlP,MAIAyK,IAAA,cACA9D,MAAA,SAAAyE,GACA,MAAA+C,GAAA,OAAA/C,MAGAX,IAAA,UACA9D,MAAA,WACAxI,KAAA8F,SAAAP,UAEAvF,KAAAqL,kBACArL,KAAAqL,gBAAA9F,UACAvF,KAAAqL,gBAAA,WAIAiB,IAAA,cACA9D,MAAA,WACA,GAAAqE,GAAAzE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,kBAEA4I,EAAA,gBAAAnE,SACAoE,IAAAlP,SAAAmP,qBAMA,OAJAF,GAAA1M,QAAA,SAAAuI,GACAoE,OAAAlP,SAAAmP,sBAAArE,KAGAoE,MAIAzQ,GACE4P,EAAAxE,QAiBFpN,GAAAD,QAAAiC,MAGG2Q,qBAAA,EAAAC,gBAAA,EAAAC,eAAA,SAA+D,UL01D5D,SAAU7S,EAAQD,EAASH,IAEL,SAASmC,GMhnFrC,GAAAG,GAAAC,GAEA,SAAAJ,GACA,YAcA,SAAAE,GAAAI,EAAAC,GAGAd,KAAAe,MAAAf,KAAAgB,KAAAC,KAAAjB,MACAA,KAAAkB,MAAAlB,KAAAmB,KAAAF,KAAAjB,MACAA,KAAAoB,eAAApB,KAAAoB,eAAAH,KAAAjB,MACAA,KAAAqB,cAAArB,KAAAqB,cAAAJ,KAAAjB,MAGAA,KAAAa,OAGAb,KAAAsB,cAGAtB,KAAAuB,OAAAT,GAiRA,QAAAU,GAAAC,GACA,MAAAC,OAAA/B,UAAAgC,MAAAhD,KAAA8C,GAWA,QAAAG,GAAAC,EAAAC,GACA,MAAAN,IAAAM,GAAAC,UAAAC,iBAAAH,IAUA,QAAAI,GAAAC,GACA,MAAAC,UAAAxC,UAAAyC,cAAAF,GACAV,EAAAU,GAGAG,QAAA1C,UAAAyC,cAAAF,IACAA,GAGA,gBAAAA,GACAN,EAAAM,OADA,GAUA,QAAAI,GAAAzB,GACA,GAAA0B,GAAAC,EAAA3B,EAEA0B,GAAAE,QACAF,EAAA,GAAAG,QAUA,QAAAF,GAAA3B,GACA,MAAAe,GAAAe,EAAAC,KAAA,KAAA/B,GAAAgC,OAAA,SAAAC,GACA,SAAAA,EAAAC,aAAAD,EAAAE,cAAAF,EAAAG,iBAAAR,UAUA,QAAAS,GAAArC,EAAAsC,GACA,GAAAZ,GAAAC,EAAA3B,GACAuC,EAAAb,EAAAc,QAAAtB,SAAAuB,cAKAH,GAAAI,UAAA,IAAAH,GACAb,IAAAE,OAAA,GAAAC,QACAS,EAAAK,kBAIKL,EAAAI,UAAAH,IAAAb,EAAAE,OAAA,IACLF,EAAA,GAAAG,QACAS,EAAAK,kBAUA,QAAAC,GAAA5C,GACA,GAAA6C,GAAAlC,EAAAX,EAAA8C,WAAAC,YACAC,EAAAH,EAAAb,OAAA,SAAAhC,GACA,WAAAA,EAAAiD,UAKA,OAFAD,GAAAE,OAAAF,EAAAR,QAAAxC,GAAA,GAEAgD,EAjZA,GAGAG,GAHArB,GAAA,4MAoCAlC,GAAAd,UAAA4B,OAAA,SAAAT,GA2BA,MAzBAd,MAAAiE,SAAAjE,KAAAiE,UAAAhC,EAAAnB,IAAA2C,EAAAzD,KAAAa,MAIAb,KAAAa,KAAAqD,aAAA,kBACAlE,KAAAmE,OAAA,EAIAnE,KAAAoE,SAAAxC,EAAA,2BAAA5B,KAAAa,KAAAwD,GAAA,MACArE,KAAAoE,SAAAE,QAAA,SAAAC,GACAA,EAAAC,iBAAA,QAAAxE,KAAAe,QACKE,KAAAjB,OAILA,KAAAyE,SAAA7C,EAAA,0BAAA5B,KAAAa,MACA6D,OAAA9C,EAAA,2BAAA5B,KAAAa,KAAAwD,GAAA,OACArE,KAAAyE,SAAAH,QAAA,SAAAK,GACAA,EAAAH,iBAAA,QAAAxE,KAAAkB,QACKD,KAAAjB,OAGLA,KAAA4E,MAAA,UAEA5E,MAWAS,EAAAd,UAAAqB,KAAA,SAAAmC,GAEA,GAAAnD,KAAAmE,MACA,MAAAnE,KAGA,IAAA6E,GAAA7E,KAAAa,KAAAiE,uBAAA,qBAoCA,OAnCA9E,MAAAa,KAAAiE,uBAAA,sBACA,GAAAC,UAAA,mCACAF,EAAA,GAAAE,UAAA,iCAEA/E,KAAAmE,OAAA,EACAnE,KAAAa,KAAAmE,gBAAA,eAKAhF,KAAAiE,SAAAK,QAAA,SAAApC,GACA,GAAA+C,GAAA/C,EAAAgD,aAAA,cAEAD,IACA/C,EAAAgC,aAAA,4BAAAe,GAGA/C,EAAAgC,aAAA,wBAMAF,EAAAjC,SAAAuB,cACAhB,EAAAtC,KAAAa,MAKAkB,SAAAoD,KAAAX,iBAAA,QAAAxE,KAAAoB,gBAAA,GACAW,SAAAyC,iBAAA,UAAAxE,KAAAqB,eAGArB,KAAA4E,MAAA,OAAAzB,GAEAnD,MAWAS,EAAAd,UAAAwB,KAAA,SAAAgC,GAEA,IAAAnD,KAAAmE,MACA,MAAAnE,KAIA,IAAA6E,GAAA7E,KAAAa,KAAAiE,uBAAA,qBAEA9E,MAAAa,KAAAiE,uBAAA,sBAEA,GAAAC,UAAA,oCAEAF,EAAA,GAAAE,UAAA,kCAEA/E,KAAAmE,OAAA,CAEA,IAAAiB,GAAApF,KAAAa,IAiCA,OAhCAwE,YAAA,WACAD,EAAAlB,aAAA,uBACE,KAIFlE,KAAAiE,SAAAK,QAAA,SAAApC,GACA,GAAA+C,GAAA/C,EAAAgD,aAAA,4BAGAD,IACA/C,EAAAgC,aAAA,cAAAe,GACA/C,EAAA8C,gBAAA,8BAEA9C,EAAA8C,gBAAA,iBAMAhB,GACAA,EAAAtB,QAKAX,SAAAoD,KAAAG,oBAAA,QAAAtF,KAAAoB,gBAAA,GACAW,SAAAuD,oBAAA,UAAAtF,KAAAqB,eAGArB,KAAA4E,MAAA,OAAAzB,GAEAnD,MASAS,EAAAd,UAAA4F,QAAA,WAoBA,MAlBAvF,MAAAmB,OAGAnB,KAAAoE,SAAAE,QAAA,SAAAC,GACAA,EAAAe,oBAAA,QAAAtF,KAAAe,QACKE,KAAAjB,OAGLA,KAAAyE,SAAAH,QAAA,SAAAK,GACAA,EAAAW,oBAAA,QAAAtF,KAAAkB,QACKD,KAAAjB,OAGLA,KAAA4E,MAAA,WAGA5E,KAAAsB,cAEAtB,MASAS,EAAAd,UAAA6F,GAAA,SAAAC,EAAAC,GAOA,WANA,KAAA1F,KAAAsB,WAAAmE,KACAzF,KAAAsB,WAAAmE,OAGAzF,KAAAsB,WAAAmE,GAAAE,KAAAD,GAEA1F,MASAS,EAAAd,UAAAiG,IAAA,SAAAH,EAAAC,GACA,GAAAG,GAAA7F,KAAAsB,WAAAmE,GAAApC,QAAAqC,EAMA,OAJAG,IAAA,GACA7F,KAAAsB,WAAAmE,GAAA1B,OAAA8B,EAAA,GAGA7F,MAWAS,EAAAd,UAAAiF,MAAA,SAAAa,EAAAtC,IACAnD,KAAAsB,WAAAmE,QAEAnB,QAAA,SAAAwB,GACAA,EAAA9F,KAAAa,KAAAsC,IACKlC,KAAAjB,QAULS,EAAAd,UAAA0B,cAAA,SAAA8B,GAGAnD,KAAAmE,OAzQA,KAyQAhB,EAAA4C,QACA5C,EAAAK,iBACAxD,KAAAmB,QAKAnB,KAAAmE,OAjRA,IAiRAhB,EAAA4C,OACA7C,EAAAlD,KAAAa,KAAAsC,IAWA1C,EAAAd,UAAAyB,eAAA,SAAA+B,GAGAnD,KAAAmE,QAAAnE,KAAAa,KAAAmF,SAAA7C,EAAAjB,SACAI,EAAAtC,KAAAa,WAkHA,KAAArC,OAAA,KAAAA,EAAAD,QACAC,EAAAD,QAAAkC,GAEAC,SAEKuF,MAFLtF,EAAA,WACA,MAAAF,IACKyF,MAAA3H,EAAAmC,MAAAlC,EAAAD,QAAAoC,SAIJ,KAAAJ,GAAAH,UNmnF4BzB,KAAKJ,EAASH,EAAoB","file":"admin.min.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2);\n\nconsole.log('This is the entry point.');\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global, ClipboardJS, A11yDialog) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var require;var require;/*!\n * WPMU DEV Shared UI\n * Copyright 2018 Incsub (https://incsub.com)\n * Licensed under GPL v2 (http://www.gnu.org/licenses/gpl-2.0.html)\n */\n/* global NodeList, Element, define */\n\n(function (global) {\n 'use strict';\n\n var FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n var TAB_KEY = 9;\n var ESCAPE_KEY = 27;\n var focusedBeforeDialog;\n\n /**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} node\n * @param {(NodeList | Element | string)} targets\n */\n function A11yDialog (node, targets) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n // Keep a reference of the node on the instance\n this.node = node;\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create(targets);\n }\n\n /**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\n A11yDialog.prototype.create = function (targets) {\n // Keep a collection of nodes to disable/enable when toggling the dialog\n this._targets = this._targets || collect(targets) || getSiblings(this.node);\n\n // Make sure the dialog element is disabled on load, and that the `shown`\n // property is synced with its value\n this.node.setAttribute('aria-hidden', true);\n this.shown = false;\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this.node.id + '\"]');\n this._openers.forEach(function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this));\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n this._closers = $$('[data-a11y-dialog-hide]', this.node)\n .concat($$('[data-a11y-dialog-hide=\"' + this.node.id + '\"]'));\n this._closers.forEach(function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this;\n };\n\n /**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this;\n }\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n var content = this.node.getElementsByClassName('sui-dialog-content');\n content[0].className = 'sui-dialog-content sui-bounce-in';\n overlay[0].className = 'sui-dialog-overlay sui-fade-in';\n\n this.shown = true;\n this.node.removeAttribute('aria-hidden');\n\n // Iterate over the targets to disable them by setting their `aria-hidden`\n // attribute to `true`; in case they already have this attribute, keep a\n // reference of their original value to be able to restore it later\n this._targets.forEach(function (target) {\n var original = target.getAttribute('aria-hidden');\n\n if (original) {\n target.setAttribute('data-a11y-dialog-original', original);\n }\n\n target.setAttribute('aria-hidden', 'true');\n });\n\n // Keep a reference to the currently focused element to be able to restore\n // it later, then set the focus to the first focusable child of the dialog\n // element\n focusedBeforeDialog = document.activeElement;\n setFocusToFirstItem(this.node);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this;\n };\n\n /**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this;\n }\n\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n\n var content = this.node.getElementsByClassName('sui-dialog-content');\n\n content[0].className = 'sui-dialog-content sui-bounce-out';\n\n overlay[0].className = 'sui-dialog-overlay sui-fade-out';\n\n this.shown = false;\n // This has been set so there is enough time for the animation to show\n var timeout_node = this.node;\n setTimeout(function () {\n\t\ttimeout_node.setAttribute('aria-hidden', 'true');\n\t}, 300);\n\n // Iterate over the targets to enable them by remove their `aria-hidden`\n // attribute or resetting them to their initial value\n this._targets.forEach(function (target) {\n var original = target.getAttribute('data-a11y-dialog-original');\n\n\n if (original) {\n target.setAttribute('aria-hidden', original);\n target.removeAttribute('data-a11y-dialog-original');\n } else {\n target.removeAttribute('aria-hidden');\n }\n });\n\n // If their was a focused element before the dialog was opened, restore the\n // focus back to it\n if (focusedBeforeDialog) {\n focusedBeforeDialog.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this;\n };\n\n /**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\n A11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this));\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this;\n };\n\n /**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this;\n };\n\n /**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.off = function (type, handler) {\n var index = this._listeners[type].indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this;\n };\n\n /**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any).\n *\n * @access private\n * @param {string} type\n * @param {Event} event\n */\n A11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n\n listeners.forEach(function (listener) {\n listener(this.node, event);\n }.bind(this));\n };\n\n /**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._bindKeypress = function (event) {\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog\n if (this.shown && event.which === ESCAPE_KEY) {\n event.preventDefault();\n this.hide();\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.which === TAB_KEY) {\n trapTabKey(this.node, event);\n }\n };\n\n /**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within the dialog element,\n // move it back to its first focusable child\n if (this.shown && !this.node.contains(event.target)) {\n setFocusToFirstItem(this.node);\n }\n };\n\n /**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array<Element>}\n */\n function toArray (collection) {\n return Array.prototype.slice.call(collection);\n }\n\n /**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array<Element>}\n */\n function $$ (selector, context) {\n return toArray((context || document).querySelectorAll(selector));\n }\n\n /**\n * Return an array of Element based on given argument (NodeList, Element or\n * string representing a selector)\n *\n * @param {(NodeList | Element | string)} target\n * @return {Array<Element>}\n */\n function collect (target) {\n if (NodeList.prototype.isPrototypeOf(target)) {\n return toArray(target);\n }\n\n if (Element.prototype.isPrototypeOf(target)) {\n return [target];\n }\n\n if (typeof target === 'string') {\n return $$(target);\n }\n }\n\n /**\n * Set the focus to the first focusable child of the given element\n *\n * @param {Element} node\n */\n function setFocusToFirstItem (node) {\n var focusableChildren = getFocusableChildren(node);\n\n if (focusableChildren.length) {\n focusableChildren[0].focus();\n }\n }\n\n /**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getFocusableChildren (node) {\n return $$(FOCUSABLE_ELEMENTS.join(','), node).filter(function (child) {\n return !!(child.offsetWidth || child.offsetHeight || child.getClientRects().length);\n });\n }\n\n /**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\n function trapTabKey (node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (!event.shiftKey && focusedItemIndex === focusableChildren.length - 1) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n }\n\n /**\n * Retrieve siblings from given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getSiblings (node) {\n var nodes = toArray(node.parentNode.childNodes);\n var siblings = nodes.filter(function (node) {\n return node.nodeType === 1;\n });\n\n siblings.splice(siblings.indexOf(node), 1);\n\n return siblings;\n }\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = A11yDialog;\n } else if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return A11yDialog;\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof global === 'object') {\n global.A11yDialog = A11yDialog;\n }\n}(typeof global !== 'undefined' ? global : window));\n\n( function( $ ) {\n\n\tvar accordionTable = $( '.sui-2-1-0 .sui-accordion' );\n\n\taccordionTable.on( 'click', '.sui-accordion-item', function() {\n\n\t\tvar getParentItem = $( this ).closest( '.sui-accordion-item' ),\n\t\t\tgetNextAdditionalContentRow = getParentItem.nextUntil( '.sui-accordion-item' );\n\n\t\tgetNextAdditionalContentRow.toggleClass( 'sui-accordion-item--open' );\n\n\t\tif ( getNextAdditionalContentRow.hasClass( 'sui-accordion-item--open' ) ) {\n\t\t\tgetParentItem.addClass( 'sui-accordion-item--open' );\n\t\t} else {\n\t\t\tgetParentItem.removeClass( 'sui-accordion-item--open' );\n\t\t}\n\n\t});\n\n}( jQuery ) );\n\n/**\n * clipboard.js v1.7.1\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT © Zeno Rocha\n */\n(function(f){if(true){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.ClipboardJS = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return require(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n\tvar proto = Element.prototype;\n\n\tproto.matches = proto.matchesSelector ||\n\t\t\t\t\tproto.mozMatchesSelector ||\n\t\t\t\t\tproto.msMatchesSelector ||\n\t\t\t\t\tproto.oMatchesSelector ||\n\t\t\t\t\tproto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest(element, selector) {\n\twhile (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n\t\tif (typeof element.matches === 'function' &&\n\t\t\telement.matches(selector)) {\n\t\t\treturn element;\n\t\t}\n\t\telement = element.parentNode;\n\t}\n}\n\nmodule.exports = closest;\n\n},{}],2:[function(require,module,exports){\nvar closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(element, selector, type, callback, useCapture) {\n\tvar listenerFn = listener.apply(this, arguments);\n\n\telement.addEventListener(type, listenerFn, useCapture);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\telement.removeEventListener(type, listenerFn, useCapture);\n\t\t}\n\t}\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n\treturn function(e) {\n\t\te.delegateTarget = closest(e.target, selector);\n\n\t\tif (e.delegateTarget) {\n\t\t\tcallback.call(element, e);\n\t\t}\n\t}\n}\n\nmodule.exports = delegate;\n\n},{\"./closest\":1}],3:[function(require,module,exports){\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n\treturn value !== undefined\n\t\t&& value instanceof HTMLElement\n\t\t&& value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn value !== undefined\n\t\t&& (type === '[object NodeList]' || type === '[object HTMLCollection]')\n\t\t&& ('length' in value)\n\t\t&& (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n\treturn typeof value === 'string'\n\t\t|| value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn type === '[object Function]';\n};\n\n},{}],4:[function(require,module,exports){\nvar is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n\tif (!target && !type && !callback) {\n\t\tthrow new Error('Missing required arguments');\n\t}\n\n\tif (!is.string(type)) {\n\t\tthrow new TypeError('Second argument must be a String');\n\t}\n\n\tif (!is.fn(callback)) {\n\t\tthrow new TypeError('Third argument must be a Function');\n\t}\n\n\tif (is.node(target)) {\n\t\treturn listenNode(target, type, callback);\n\t}\n\telse if (is.nodeList(target)) {\n\t\treturn listenNodeList(target, type, callback);\n\t}\n\telse if (is.string(target)) {\n\t\treturn listenSelector(target, type, callback);\n\t}\n\telse {\n\t\tthrow new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n\t}\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n\tnode.addEventListener(type, callback);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tnode.removeEventListener(type, callback);\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\tnode.addEventListener(type, callback);\n\t});\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\t\t\tnode.removeEventListener(type, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n\treturn delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n},{\"./is\":3,\"delegate\":2}],5:[function(require,module,exports){\nfunction select(element) {\n\tvar selectedText;\n\n\tif (element.nodeName === 'SELECT') {\n\t\telement.focus();\n\n\t\tselectedText = element.value;\n\t}\n\telse if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n\t\tvar isReadOnly = element.hasAttribute('readonly');\n\n\t\tif (!isReadOnly) {\n\t\t\telement.setAttribute('readonly', '');\n\t\t}\n\n\t\telement.select();\n\t\telement.setSelectionRange(0, element.value.length);\n\n\t\tif (!isReadOnly) {\n\t\t\telement.removeAttribute('readonly');\n\t\t}\n\n\t\tselectedText = element.value;\n\t}\n\telse {\n\t\tif (element.hasAttribute('contenteditable')) {\n\t\t\telement.focus();\n\t\t}\n\n\t\tvar selection = window.getSelection();\n\t\tvar range = document.createRange();\n\n\t\trange.selectNodeContents(element);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\n\t\tselectedText = selection.toString();\n\t}\n\n\treturn selectedText;\n}\n\nmodule.exports = select;\n\n},{}],6:[function(require,module,exports){\nfunction E () {\n\t// Keep this empty so it's easier to inherit from\n\t// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n\ton: function (name, callback, ctx) {\n\tvar e = this.e || (this.e = {});\n\n\t(e[name] || (e[name] = [])).push({\n\t\tfn: callback,\n\t\tctx: ctx\n\t});\n\n\treturn this;\n\t},\n\n\tonce: function (name, callback, ctx) {\n\tvar self = this;\n\tfunction listener () {\n\t\tself.off(name, listener);\n\t\tcallback.apply(ctx, arguments);\n\t};\n\n\tlistener._ = callback\n\treturn this.on(name, listener, ctx);\n\t},\n\n\temit: function (name) {\n\tvar data = [].slice.call(arguments, 1);\n\tvar evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n\tvar i = 0;\n\tvar len = evtArr.length;\n\n\tfor (i; i < len; i++) {\n\t\tevtArr[i].fn.apply(evtArr[i].ctx, data);\n\t}\n\n\treturn this;\n\t},\n\n\toff: function (name, callback) {\n\tvar e = this.e || (this.e = {});\n\tvar evts = e[name];\n\tvar liveEvents = [];\n\n\tif (evts && callback) {\n\t\tfor (var i = 0, len = evts.length; i < len; i++) {\n\t\tif (evts[i].fn !== callback && evts[i].fn._ !== callback)\n\t\t\tliveEvents.push(evts[i]);\n\t\t}\n\t}\n\n\t// Remove event from queue to prevent memory leak\n\t// Suggested by https://github.com/lazd\n\t// Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n\t(liveEvents.length)\n\t\t? e[name] = liveEvents\n\t\t: delete e[name];\n\n\treturn this;\n\t}\n};\n\nmodule.exports = E;\n\n},{}],7:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', 'select'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('select'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.select);\n\t\tglobal.clipboardAction = mod.exports;\n\t}\n})(this, function (module, _select) {\n\t'use strict';\n\n\tvar _select2 = _interopRequireDefault(_select);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tvar ClipboardJSAction = function () {\n\t\t/**\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJSAction(options) {\n\t\t\t_classCallCheck(this, ClipboardJSAction);\n\n\t\t\tthis.resolveOptions(options);\n\t\t\tthis.initSelection();\n\t\t}\n\n\t\t/**\n\t\t * Defines base properties passed from constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJSAction, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = options.action;\n\t\t\t\tthis.container = options.container;\n\t\t\t\tthis.emitter = options.emitter;\n\t\t\t\tthis.target = options.target;\n\t\t\t\tthis.text = options.text;\n\t\t\t\tthis.trigger = options.trigger;\n\n\t\t\t\tthis.selectedText = '';\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'initSelection',\n\t\t\tvalue: function initSelection() {\n\t\t\t\tif (this.text) {\n\t\t\t\t\tthis.selectFake();\n\t\t\t\t} else if (this.target) {\n\t\t\t\t\tthis.selectTarget();\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectFake',\n\t\t\tvalue: function selectFake() {\n\t\t\t\tvar _this = this;\n\n\t\t\t\tvar isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n\t\t\t\tthis.removeFake();\n\n\t\t\t\tthis.fakeHandlerCallback = function () {\n\t\t\t\t\treturn _this.removeFake();\n\t\t\t\t};\n\t\t\t\tthis.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n\t\t\t\tthis.fakeElem = document.createElement('textarea');\n\t\t\t\t// Prevent zooming on iOS\n\t\t\t\tthis.fakeElem.style.fontSize = '12pt';\n\t\t\t\t// Reset box model\n\t\t\t\tthis.fakeElem.style.border = '0';\n\t\t\t\tthis.fakeElem.style.padding = '0';\n\t\t\t\tthis.fakeElem.style.margin = '0';\n\t\t\t\t// Move element out of screen horizontally\n\t\t\t\tthis.fakeElem.style.position = 'absolute';\n\t\t\t\tthis.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n\t\t\t\t// Move element to the same position vertically\n\t\t\t\tvar yPosition = window.pageYOffset || document.documentElement.scrollTop;\n\t\t\t\tthis.fakeElem.style.top = yPosition + 'px';\n\n\t\t\t\tthis.fakeElem.setAttribute('readonly', '');\n\t\t\t\tthis.fakeElem.value = this.text;\n\n\t\t\t\tthis.container.appendChild(this.fakeElem);\n\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.fakeElem);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'removeFake',\n\t\t\tvalue: function removeFake() {\n\t\t\t\tif (this.fakeHandler) {\n\t\t\t\t\tthis.container.removeEventListener('click', this.fakeHandlerCallback);\n\t\t\t\t\tthis.fakeHandler = null;\n\t\t\t\t\tthis.fakeHandlerCallback = null;\n\t\t\t\t}\n\n\t\t\t\tif (this.fakeElem) {\n\t\t\t\t\tthis.container.removeChild(this.fakeElem);\n\t\t\t\t\tthis.fakeElem = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectTarget',\n\t\t\tvalue: function selectTarget() {\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.target);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'copyText',\n\t\t\tvalue: function copyText() {\n\t\t\t\tvar succeeded = void 0;\n\n\t\t\t\ttry {\n\t\t\t\t\tsucceeded = document.execCommand(this.action);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tsucceeded = false;\n\t\t\t\t}\n\n\t\t\t\tthis.handleResult(succeeded);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'handleResult',\n\t\t\tvalue: function handleResult(succeeded) {\n\t\t\t\tthis.emitter.emit(succeeded ? 'success' : 'error', {\n\t\t\t\t\taction: this.action,\n\t\t\t\t\ttext: this.selectedText,\n\t\t\t\t\ttrigger: this.trigger,\n\t\t\t\t\tclearSelection: this.clearSelection.bind(this)\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'clearSelection',\n\t\t\tvalue: function clearSelection() {\n\t\t\t\tif (this.trigger) {\n\t\t\t\t\tthis.trigger.focus();\n\t\t\t\t}\n\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.removeFake();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'action',\n\t\t\tset: function set() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n\t\t\t\tthis._action = action;\n\n\t\t\t\tif (this._action !== 'copy' && this._action !== 'cut') {\n\t\t\t\t\tthrow new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._action;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'target',\n\t\t\tset: function set(target) {\n\t\t\t\tif (target !== undefined) {\n\t\t\t\t\tif (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n\t\t\t\t\t\tif (this.action === 'copy' && target.hasAttribute('disabled')) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error('Invalid \"target\" value, use a valid Element');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._target;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJSAction;\n\t}();\n\n\tmodule.exports = ClipboardJSAction;\n});\n\n},{\"select\":5}],8:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n\t\tglobal.clipboard = mod.exports;\n\t}\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n\t'use strict';\n\n\tvar _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n\tvar _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n\tvar _goodListener2 = _interopRequireDefault(_goodListener);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tfunction _possibleConstructorReturn(self, call) {\n\t\tif (!self) {\n\t\t\tthrow new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t\t}\n\n\t\treturn call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n\t}\n\n\tfunction _inherits(subClass, superClass) {\n\t\tif (typeof superClass !== \"function\" && superClass !== null) {\n\t\t\tthrow new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n\t\t}\n\n\t\tsubClass.prototype = Object.create(superClass && superClass.prototype, {\n\t\t\tconstructor: {\n\t\t\t\tvalue: subClass,\n\t\t\t\tenumerable: false,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\t\tif (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n\t}\n\n\tvar ClipboardJS = function (_Emitter) {\n\t\t_inherits(ClipboardJS, _Emitter);\n\n\t\t/**\n\t\t * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJS(trigger, options) {\n\t\t\t_classCallCheck(this, ClipboardJS);\n\n\t\t\tvar _this = _possibleConstructorReturn(this, (ClipboardJS.__proto__ || Object.getPrototypeOf(ClipboardJS)).call(this));\n\n\t\t\t_this.resolveOptions(options);\n\t\t\t_this.listenClick(trigger);\n\t\t\treturn _this;\n\t\t}\n\n\t\t/**\n\t\t * Defines if attributes would be resolved using internal setter functions\n\t\t * or custom functions that were passed in the constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJS, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n\t\t\t\tthis.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n\t\t\t\tthis.text = typeof options.text === 'function' ? options.text : this.defaultText;\n\t\t\t\tthis.container = _typeof(options.container) === 'object' ? options.container : document.body;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'listenClick',\n\t\t\tvalue: function listenClick(trigger) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tthis.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n\t\t\t\t\treturn _this2.onClick(e);\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'onClick',\n\t\t\tvalue: function onClick(e) {\n\t\t\t\tvar trigger = e.delegateTarget || e.currentTarget;\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\n\t\t\t\tthis.clipboardAction = new _clipboardAction2.default({\n\t\t\t\t\taction: this.action(trigger),\n\t\t\t\t\ttarget: this.target(trigger),\n\t\t\t\t\ttext: this.text(trigger),\n\t\t\t\t\tcontainer: this.container,\n\t\t\t\t\ttrigger: trigger,\n\t\t\t\t\temitter: this\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultAction',\n\t\t\tvalue: function defaultAction(trigger) {\n\t\t\t\treturn getAttributeValue('action', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultTarget',\n\t\t\tvalue: function defaultTarget(trigger) {\n\t\t\t\tvar selector = getAttributeValue('target', trigger);\n\n\t\t\t\tif (selector) {\n\t\t\t\t\treturn document.querySelector(selector);\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultText',\n\t\t\tvalue: function defaultText(trigger) {\n\t\t\t\treturn getAttributeValue('text', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.listener.destroy();\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction.destroy();\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}], [{\n\t\t\tkey: 'isSupported',\n\t\t\tvalue: function isSupported() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n\t\t\t\tvar actions = typeof action === 'string' ? [action] : action;\n\t\t\t\tvar support = !!document.queryCommandSupported;\n\n\t\t\t\tactions.forEach(function (action) {\n\t\t\t\t\tsupport = support && !!document.queryCommandSupported(action);\n\t\t\t\t});\n\n\t\t\t\treturn support;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJS;\n\t}(_tinyEmitter2.default);\n\n\t/**\n\t * Helper function to retrieve attribute value.\n\t * @param {String} suffix\n\t * @param {Element} element\n\t */\n\tfunction getAttributeValue(suffix, element) {\n\t\tvar attribute = 'data-clipboard-' + suffix;\n\n\t\tif (!element.hasAttribute(attribute)) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn element.getAttribute(attribute);\n\t}\n\n\tmodule.exports = ClipboardJS;\n});\n\n},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)\n});\n\n( function( $ ) {\n\n\t$( '.sui-2-1-0 .sui-code-snippet:not(.sui-no-copy)' ).each( function( i ) {\n\t\tvar id = 'sui-code-snippet-' + i,\n\t\t\tbutton = '<button class=\"sui-button\" data-clipboard-target=\"#' + id + '\">Copy</button>';\n\n\t\t$( this ).wrap( '<div class=\"sui-code-snippet-wrapper\"></div>' );\n\t\t$( this ).attr( 'id', id ).after( button );\n\t});\n\n\t$( document ).ready( function() {\n\t\tvar btns = $( '[data-clipboard-target]' );\n\t\tvar clipboard = new ClipboardJS( '[data-clipboard-target]' );\n\n\t\tif ( btns.length ) {\n\n\t\t\tclipboard.on( 'success', function( e ) {\n\t\t\t\te.clearSelection();\n\t\t\t\tshowTooltip( e.trigger, 'Copied!' );\n\t\t\t});\n\n\t\t\tbtns.mouseleave( function() {\n\t\t\t\t$( this ).removeClass( 'sui-tooltip' );\n\t\t\t\t$( this ).removeAttr( 'aria-label' );\n\t\t\t\t$( this ).removeAttr( 'data-tooltip' );\n\t\t\t});\n\n\t\t\tfunction showTooltip( e, msg ) {\n\t\t\t\t$( e ).addClass( 'sui-tooltip' );\n\t\t\t\t$( e ).attr( 'aria-label', msg );\n\t\t\t\t$( e ).attr( 'data-tooltip', msg );\n\t\t\t}\n\n\t\t}\n\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tSUI.linkDropdown = function() {\n\n\t\tfunction closeAllDropdowns( $except ) {\n\t\t\tvar $dropdowns = $( '.sui-2-1-0 .sui-dropdown' );\n\n\t\t\tif ( $except ) {\n\t\t\t\t$dropdowns = $dropdowns.not( $except );\n\t\t\t}\n\n\t\t\t$dropdowns.removeClass( 'open' );\n\t\t}\n\n\t\t$( 'body' ).click( function( e ) {\n\t\t\tvar $this = $( e.target ),\n\t\t\t\t$el = $this.closest( '.sui-dropdown' );\n\n\t\t\tif ( 0 == $el.length ) {\n\t\t\t\tcloseAllDropdowns();\n\t\t\t} else if ( $this.is( 'a' ) ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tcloseAllDropdowns( $el );\n\n\t\t\t\t$el.toggleClass( 'open' );\n\t\t\t}\n\n\t\t});\n\n\t};\n\n\tSUI.linkDropdown();\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tdocument.addEventListener( 'DOMContentLoaded', function() {\n\t\tvar mainEl = $( '.sui-wrap' );\n\n\t\t// Init the dialog elements.\n\t\t$( '.sui-dialog' ).each( function() {\n\t\t\tnew A11yDialog( this, mainEl );\n\t\t});\n\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t$( '.sui-2-1-0 .sui-notice-top:not(.sui-cant-dismiss)' ).delay( 3000 ).slideUp( 'slow' );\n\n\t$( '.sui-2-1-0 .sui-notice-dismiss' ).click( function( e ) {\n\t\te.preventDefault();\n\n\t\t$( this ).parent( '.sui-notice' ).stop().slideUp( 'slow' );\n\n\t\treturn false;\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tSUI.showHidePassword = function() {\n\n\t\t$( '.sui-2-1-0 .sui-password-group' ).each( function() {\n\t\t\tvar $this = $( this ),\n\t\t\t\t$input = $this.find( 'input[type=\"password\"]' ),\n\t\t\t\t$button = $this.find( '.sui-password-toggle' );\n\n\t\t\t$button.on( 'click', function() {\n\t\t\t\tvar $inputType = '',\n\t\t\t\t\t$repInput = '';\n\n\t\t\t\t$( this ).toggleClass( 'is-visible' );\n\n\t\t\t\tif ( $input.hasClass( 'is-visible' ) ) {\n\t\t\t\t\t$input.removeClass( 'is-visible' ).addClass( 'is-hidden' );\n\t\t\t\t\t$inputType = 'password';\n\t\t\t\t\t$button.find( '> .sui-screen-reader-text' ).text( 'Show Password' );\n\t\t\t\t\t$button.find( '> i' ).removeClass( 'sui-ico-eye-hide' ).addClass( 'sui-ico-eye' );\n\t\t\t\t} else {\n\t\t\t\t\t$input.removeClass( 'is-hidden' ).addClass( 'is-visible' );\n\t\t\t\t\t$inputType = 'text';\n\t\t\t\t\t$button.find( '> .sui-screen-reader-text' ).text( 'Hide Password' );\n\t\t\t\t\t$button.find( '> i' ).removeClass( 'sui-ico-eye' ).addClass( 'sui-ico-eye-hide' );\n\t\t\t\t}\n\n\t\t\t\t$repInput = $( '<input type=' + $inputType + ' />' )\n\t\t\t\t\t.attr( 'id', $input.attr( 'id' ) )\n\t\t\t\t\t.attr( 'name', $input.attr( 'name' ) )\n\t\t\t\t\t.attr( 'class', $input.attr( 'class' ) )\n\t\t\t\t\t.val( $input.val() )\n\t\t\t\t\t.insertBefore( $input );\n\n\t\t\t\t$input.remove();\n\t\t\t\t$input = $repInput;\n\t\t\t\t$input.focus();\n\n\t\t\t});\n\n\t\t});\n\n\t};\n\n\tSUI.showHidePassword();\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\tloadCircleScore = function( el ) {\n\t\tvar dial = $( el ).find( 'svg circle:last-child' ),\n\t\t\tscore = $( el ).data( 'score' ),\n\t\t\tradius = 42,\n\t\t\tcircumference = 2 * Math.PI * radius,\n\t\t\tdashLength = ( circumference / 100 ) * score,\n\t\t\tgapLength = dashLength * 100 - score,\n\t\t\tsvg =\n\t\t\t\t'<svg viewbox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\\n' +\n\t\t\t\t\t'<circle stroke-width=\"16\" cx=\"50\" cy=\"50\" r=\"42\" />\\n' +\n\t\t\t\t\t'<circle stroke-width=\"16\" cx=\"50\" cy=\"50\" r=\"42\" stroke-dasharray=\"0,' + gapLength + '\" />\\n' +\n\t\t\t\t'</svg>\\n' +\n\t\t\t\t'<span class=\"sui-circle-score-label\">' + score + '</span>\\n';\n\n\t\t// Add svg to score element, add loaded class, & change stroke-dasharray to represent target score/percentage.\n\t\t$( el ).prepend( svg ).addClass( 'loaded' ).find( 'circle:last-child' ).css( 'animation', 'sui' + score + ' 3s forwards' );\n\t};\n\n\t$( '.sui-2-1-0 .sui-circle-score' ).each( function() {\n\t\tloadCircleScore( this );\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\tsuiSelect = function( el ) {\n\t\tvar jq = $( el ),\n\t\t\twrap, handle, list, value, items;\n\n\t\tif ( ! jq.is( 'select' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( jq.closest( '.select-container' ).length || jq.data( 'select2' ) || jq.is( '.none-sui' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Add the DOM elements to style the select list.\n\t\tfunction setupElement() {\n\t\t\tjq.wrap( '<div class=\"select-container\">' );\n\t\t\tjq.hide();\n\n\t\t\twrap = jq.parent();\n\t\t\thandle = $( '<span class=\"dropdown-handle\"><i class=\"sui-icon-chevron-down\" aria-hidden=\"true\"></i></span>' ).prependTo( wrap );\n\t\t\tlist = $( '<div class=\"select-list-container\"></div>' ).appendTo( wrap );\n\t\t\tvalue = $( '<div class=\"list-value\">&nbsp;</div>' ).appendTo( list );\n\t\t\titems = $( '<ul class=\"list-results\"></ul>' ).appendTo( list );\n\n\t\t\twrap.addClass( jq.attr( 'class' ) );\n\t\t}\n\n\t\t// When changing selection using JS, you need to trigger a 'sui:change' event\n\t\t// eg: $('select').val('4').trigger('sui:change')\n\t\tfunction handleSelectionChange() {\n\t\t\tjq.on( 'sui:change', function() {\n\n\t\t\t\t// We need to re-populateList to handle dynamic select options added via JS/ajax.\n\t\t\t\tpopulateList();\n\t\t\t\titems.find( 'li' ).not( '.optgroup-label' ).on( 'click', function onItemClick( ev ) {\n\t\t\t\t\tvar opt = $( ev.target );\n\t\t\t\t\tselectItem( opt, false );\n\t\t\t\t\thandleValue();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Add all the options to the new DOM elements.\n\t\tfunction populateList() {\n\t\t\titems.empty();\n\t\t\tif ( jq.find( 'optgroup' ).length ) {\n\t\t\t\tjq.find( 'optgroup' ).each( function() {\n\t\t\t\t\tvar optgroup = $( this ),\n\t\t\t\t\t\toptGroupItem;\n\t\t\t\t\toptGroupItem = $( '<ul></ul>' ).appendTo( items );\n\t\t\t\t\t$label = $( '<li class=\"optgroup-label\"></li>' ).text( optgroup.prop( 'label' ) );\n\n\t\t\t\t\toptGroupItem.html( $label );\n\t\t\t\t\toptGroupItem.addClass( 'optgroup' );\n\n\t\t\t\t\toptgroup.find( 'option' ).each( function onPopulateLoop() {\n\t\t\t\t\t\tvar opt = $( this ),\n\t\t\t\t\t\t\titem;\n\t\t\t\t\t\titem = $( '<li></li>' ).appendTo( optGroupItem );\n\t\t\t\t\t\titem.text( opt.text() );\n\t\t\t\t\t\titem.data( 'value', opt.val() );\n\n\t\t\t\t\t\tif ( opt.val() == jq.val() ) {\n\t\t\t\t\t\t\tselectItem( item );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tjq.find( 'option' ).each( function onPopulateLoop() {\n\t\t\t\t\tvar opt = $( this ),\n\t\t\t\t\t\titem;\n\t\t\t\t\titem = $( '<li></li>' ).appendTo( items );\n\t\t\t\t\titem.text( opt.text() );\n\t\t\t\t\titem.data( 'value', opt.val() );\n\n\t\t\t\t\tif ( opt.val() == jq.val() ) {\n\t\t\t\t\t\tselectItem( item, true );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t}\n\n\t\t// Checks the option value for a link.\n\t\tfunction handleValue() {\n\t\t\tvar val = jq[0].value;\n\n\t\t\t// If option is link, navigate to it.\n\t\t\tif ( val.match( '^https?:\\/\\/|#' ) ) {\n\t\t\t\twindow.location.href = val;\n\t\t\t}\n\t\t}\n\n\t\t// Toggle the dropdown state between open/closed.\n\t\tfunction stateToggle() {\n\t\t\tif ( wrap.find( 'select' ).is( ':disabled' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( ! wrap.hasClass( 'active' ) ) {\n\t\t\t\tstateOpen();\n\t\t\t} else {\n\t\t\t\tstateClose();\n\t\t\t}\n\t\t}\n\n\t\t// Close the dropdown list.\n\t\tfunction stateClose( item ) {\n\t\t\tif ( ! item ) {\n\t\t\t\titem = wrap;\n\t\t\t}\n\n\t\t\titem.removeClass( 'active' );\n\t\t\titem.closest( 'tr' ).removeClass( 'select-open' );\n\t\t}\n\n\t\t// Open the dropdown list.\n\t\tfunction stateOpen() {\n\t\t\t$( '.select-container.active' ).each( function() {\n\t\t\t\tstateClose( $( this ) );\n\t\t\t});\n\n\t\t\twrap.addClass( 'active' );\n\t\t\twrap.closest( 'tr' ).addClass( 'select-open' );\n\t\t}\n\n\t\t// Visually mark the specified option as \"selected\".\n\t\tfunction selectItem( opt, isInit ) {\n\t\t\tisInit = 'undefined' === typeof isInit ? false : isInit;\n\t\t\tvalue.text( opt.text() );\n\t\t\t$( '.current', items ).removeClass( 'current' );\n\t\t\topt.addClass( 'current' );\n\t\t\tstateClose();\n\n\t\t\t// Also update the select list value.\n\t\t\tjq.val( opt.data( 'value' ) );\n\n\t\t\tif ( ! isInit ) {\n\t\t\t\tjq.trigger( 'change' );\n\t\t\t}\n\n\t\t}\n\n\t\t// Element constructor.\n\t\tfunction init() {\n\t\t\tvar selectID;\n\n\t\t\tsetupElement();\n\t\t\tpopulateList();\n\t\t\thandleSelectionChange();\n\n\t\t\titems.find( 'li' ).not( '.optgroup-label' ).on( 'click', function onItemClick( ev ) {\n\t\t\t\tvar opt = $( ev.target );\n\t\t\t\tselectItem( opt, false );\n\t\t\t\thandleValue();\n\t\t\t});\n\n\t\t\thandle.on( 'click', stateToggle );\n\t\t\tvalue.on( 'click', stateToggle );\n\t\t\tjq.on( 'focus', stateOpen );\n\n\t\t\t$( document ).click( function onOutsideClick( ev ) {\n\t\t\t\tvar jq = $( ev.target ),\n\t\t\t\t\tselectID;\n\n\t\t\t\tif ( jq.closest( '.select-container' ).length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( jq.is( 'label' ) && jq.attr( 'for' ) ) {\n\t\t\t\t\tselectID = jq.attr( 'for' );\n\n\t\t\t\t\tif ( $( 'select#' + selectID ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstateClose();\n\t\t\t});\n\n\t\t\tselectID = jq.attr( 'id' );\n\n\t\t\tif ( selectID ) {\n\t\t\t\t$( 'label[for=' + selectID + ']' ).on( 'click', stateOpen );\n\t\t\t}\n\n\t\t\tjq.addClass( 'sui-styled' );\n\t\t}\n\n\t\tinit();\n\n\t\treturn this;\n\t};\n\n\t// Convert all select lists to fancy sui Select lists.\n\t$( '.sui-2-1-0 select' ).each( function() {\n\t\tsuiSelect( this );\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\tsuiTabs = function( el ) {\n\t\tvar jq = $( el ).closest( '.sui-tabs' );\n\n\t\tif ( ! jq.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Resize the tab-area after short delay.\n\t\tfunction resizeArea() {\n\t\t\twindow.setTimeout( resizeAreaHandler, 20 );\n\t\t}\n\n\t\t// Resize the tab area to match the current tab.\n\t\tfunction resizeAreaHandler() {\n\t\t\tvar current = jq.find( '.sui-tab > input:checked' ).parent(),\n\t\t\t\tcontent = current.find( '.sui-tab-content' );\n\n\t\t\tjq.height( content.outerHeight() + current.outerHeight() - 6 );\n\t\t}\n\n\t\t// Updates the URL hash to keep tab open during page refresh\n\t\tfunction updateHash() {\n\t\t\tvar current = jq.find( '.sui-tab > input:checked' );\n\n\t\t\tjq.find( '.sui-tab label.active' ).removeClass( 'active' );\n\t\t\tcurrent.parent().find( 'label' ).addClass( 'active' );\n\n\t\t\tresizeArea();\n\t\t}\n\n\t\t// Open the tab that is specified in window URL hash\n\t\tfunction switchTab() {\n\t\t\tvar curTab,\n\t\t\t\troute = window.location.hash.replace( /[^\\w-_]/g, '' );\n\n\t\t\tif ( route ) {\n\t\t\t\tcurTab = jq.find( 'input#' + route );\n\n\t\t\t\tif ( curTab.parent().find( 'label' ).length ) {\n\t\t\t\t\tjq.find( '.sui-tab label.active' ).removeClass( 'active' );\n\t\t\t\t\tcurTab.parent().find( 'label' ).addClass( 'active' );\n\n\t\t\t\t\tif ( curTab.length && ! curTab.prop( 'checked' ) ) {\n\t\t\t\t\t\tcurTab.prop( 'checked', true );\n\n\t\t\t\t\t\tscrollWindow();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Scroll the window to top of the tab list.\n\t\tfunction scrollWindow() {\n\t\t\tresizeArea();\n\n\t\t\t$( 'html, body' ).scrollTop(\n\t\t\t\tjq.offset().top -\n\t\t\t\tparseInt( $( 'html' ).css( 'paddingTop' ) ) -\n\t\t\t\t20\n\t\t\t);\n\t\t}\n\n\t\t// Constructor.\n\t\tfunction init() {\n\t\t\tvar current = jq.find( '.sui-tab > input:checked' );\n\n\t\t\tjq.on( 'click', '.sui-tab > input[type=radio]', updateHash );\n\t\t\t$( window ).on( 'hashchange', switchTab );\n\t\t\tcurrent.parent().find( 'label' ).addClass( 'active' );\n\n\t\t\tresizeArea();\n\t\t\tswitchTab();\n\t\t}\n\n\t\tinit();\n\n\t\t$( window ).resize( function() {\n\t\t\tresizeArea();\n\t\t});\n\n\t\treturn this;\n\t};\n\n\t// Initialize all tab-areas.\n\t$( '.sui-2-1-0 .sui-tabs' ).each( function() {\n\t\tsuiTabs( this );\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tSUI.upload = function() {\n\n\t\t$( '.sui-2-1-0 .sui-upload-group input[type=\"file\"]' ).on( 'change', function( e ) {\n\t\t\tvar file = $( this )[0].files[0],\n\t\t\t\tmessage = $( this ).find( '~ .sui-upload-message' );\n\n\t\t\tif ( file ) {\n\t\t\t\tmessage.text( file.name );\n\t\t\t}\n\n\t\t});\n\n\t};\n\n\tSUI.upload();\n\n}( jQuery ) );\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(3), __webpack_require__(4)))\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar require;var require;/**\n * clipboard.js v1.7.1\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT © Zeno Rocha\n */\n(function(f){if(true){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.ClipboardJS = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return require(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n\tvar proto = Element.prototype;\n\n\tproto.matches = proto.matchesSelector ||\n\t\t\t\t\tproto.mozMatchesSelector ||\n\t\t\t\t\tproto.msMatchesSelector ||\n\t\t\t\t\tproto.oMatchesSelector ||\n\t\t\t\t\tproto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest(element, selector) {\n\twhile (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n\t\tif (typeof element.matches === 'function' &&\n\t\t\telement.matches(selector)) {\n\t\t\treturn element;\n\t\t}\n\t\telement = element.parentNode;\n\t}\n}\n\nmodule.exports = closest;\n\n},{}],2:[function(require,module,exports){\nvar closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(element, selector, type, callback, useCapture) {\n\tvar listenerFn = listener.apply(this, arguments);\n\n\telement.addEventListener(type, listenerFn, useCapture);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\telement.removeEventListener(type, listenerFn, useCapture);\n\t\t}\n\t}\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n\treturn function(e) {\n\t\te.delegateTarget = closest(e.target, selector);\n\n\t\tif (e.delegateTarget) {\n\t\t\tcallback.call(element, e);\n\t\t}\n\t}\n}\n\nmodule.exports = delegate;\n\n},{\"./closest\":1}],3:[function(require,module,exports){\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n\treturn value !== undefined\n\t\t&& value instanceof HTMLElement\n\t\t&& value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn value !== undefined\n\t\t&& (type === '[object NodeList]' || type === '[object HTMLCollection]')\n\t\t&& ('length' in value)\n\t\t&& (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n\treturn typeof value === 'string'\n\t\t|| value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn type === '[object Function]';\n};\n\n},{}],4:[function(require,module,exports){\nvar is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n\tif (!target && !type && !callback) {\n\t\tthrow new Error('Missing required arguments');\n\t}\n\n\tif (!is.string(type)) {\n\t\tthrow new TypeError('Second argument must be a String');\n\t}\n\n\tif (!is.fn(callback)) {\n\t\tthrow new TypeError('Third argument must be a Function');\n\t}\n\n\tif (is.node(target)) {\n\t\treturn listenNode(target, type, callback);\n\t}\n\telse if (is.nodeList(target)) {\n\t\treturn listenNodeList(target, type, callback);\n\t}\n\telse if (is.string(target)) {\n\t\treturn listenSelector(target, type, callback);\n\t}\n\telse {\n\t\tthrow new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n\t}\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n\tnode.addEventListener(type, callback);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tnode.removeEventListener(type, callback);\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\tnode.addEventListener(type, callback);\n\t});\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\t\t\tnode.removeEventListener(type, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n\treturn delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n},{\"./is\":3,\"delegate\":2}],5:[function(require,module,exports){\nfunction select(element) {\n\tvar selectedText;\n\n\tif (element.nodeName === 'SELECT') {\n\t\telement.focus();\n\n\t\tselectedText = element.value;\n\t}\n\telse if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n\t\tvar isReadOnly = element.hasAttribute('readonly');\n\n\t\tif (!isReadOnly) {\n\t\t\telement.setAttribute('readonly', '');\n\t\t}\n\n\t\telement.select();\n\t\telement.setSelectionRange(0, element.value.length);\n\n\t\tif (!isReadOnly) {\n\t\t\telement.removeAttribute('readonly');\n\t\t}\n\n\t\tselectedText = element.value;\n\t}\n\telse {\n\t\tif (element.hasAttribute('contenteditable')) {\n\t\t\telement.focus();\n\t\t}\n\n\t\tvar selection = window.getSelection();\n\t\tvar range = document.createRange();\n\n\t\trange.selectNodeContents(element);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\n\t\tselectedText = selection.toString();\n\t}\n\n\treturn selectedText;\n}\n\nmodule.exports = select;\n\n},{}],6:[function(require,module,exports){\nfunction E () {\n\t// Keep this empty so it's easier to inherit from\n\t// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n\ton: function (name, callback, ctx) {\n\tvar e = this.e || (this.e = {});\n\n\t(e[name] || (e[name] = [])).push({\n\t\tfn: callback,\n\t\tctx: ctx\n\t});\n\n\treturn this;\n\t},\n\n\tonce: function (name, callback, ctx) {\n\tvar self = this;\n\tfunction listener () {\n\t\tself.off(name, listener);\n\t\tcallback.apply(ctx, arguments);\n\t};\n\n\tlistener._ = callback\n\treturn this.on(name, listener, ctx);\n\t},\n\n\temit: function (name) {\n\tvar data = [].slice.call(arguments, 1);\n\tvar evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n\tvar i = 0;\n\tvar len = evtArr.length;\n\n\tfor (i; i < len; i++) {\n\t\tevtArr[i].fn.apply(evtArr[i].ctx, data);\n\t}\n\n\treturn this;\n\t},\n\n\toff: function (name, callback) {\n\tvar e = this.e || (this.e = {});\n\tvar evts = e[name];\n\tvar liveEvents = [];\n\n\tif (evts && callback) {\n\t\tfor (var i = 0, len = evts.length; i < len; i++) {\n\t\tif (evts[i].fn !== callback && evts[i].fn._ !== callback)\n\t\t\tliveEvents.push(evts[i]);\n\t\t}\n\t}\n\n\t// Remove event from queue to prevent memory leak\n\t// Suggested by https://github.com/lazd\n\t// Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n\t(liveEvents.length)\n\t\t? e[name] = liveEvents\n\t\t: delete e[name];\n\n\treturn this;\n\t}\n};\n\nmodule.exports = E;\n\n},{}],7:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', 'select'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('select'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.select);\n\t\tglobal.clipboardAction = mod.exports;\n\t}\n})(this, function (module, _select) {\n\t'use strict';\n\n\tvar _select2 = _interopRequireDefault(_select);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tvar ClipboardJSAction = function () {\n\t\t/**\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJSAction(options) {\n\t\t\t_classCallCheck(this, ClipboardJSAction);\n\n\t\t\tthis.resolveOptions(options);\n\t\t\tthis.initSelection();\n\t\t}\n\n\t\t/**\n\t\t * Defines base properties passed from constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJSAction, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = options.action;\n\t\t\t\tthis.container = options.container;\n\t\t\t\tthis.emitter = options.emitter;\n\t\t\t\tthis.target = options.target;\n\t\t\t\tthis.text = options.text;\n\t\t\t\tthis.trigger = options.trigger;\n\n\t\t\t\tthis.selectedText = '';\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'initSelection',\n\t\t\tvalue: function initSelection() {\n\t\t\t\tif (this.text) {\n\t\t\t\t\tthis.selectFake();\n\t\t\t\t} else if (this.target) {\n\t\t\t\t\tthis.selectTarget();\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectFake',\n\t\t\tvalue: function selectFake() {\n\t\t\t\tvar _this = this;\n\n\t\t\t\tvar isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n\t\t\t\tthis.removeFake();\n\n\t\t\t\tthis.fakeHandlerCallback = function () {\n\t\t\t\t\treturn _this.removeFake();\n\t\t\t\t};\n\t\t\t\tthis.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n\t\t\t\tthis.fakeElem = document.createElement('textarea');\n\t\t\t\t// Prevent zooming on iOS\n\t\t\t\tthis.fakeElem.style.fontSize = '12pt';\n\t\t\t\t// Reset box model\n\t\t\t\tthis.fakeElem.style.border = '0';\n\t\t\t\tthis.fakeElem.style.padding = '0';\n\t\t\t\tthis.fakeElem.style.margin = '0';\n\t\t\t\t// Move element out of screen horizontally\n\t\t\t\tthis.fakeElem.style.position = 'absolute';\n\t\t\t\tthis.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n\t\t\t\t// Move element to the same position vertically\n\t\t\t\tvar yPosition = window.pageYOffset || document.documentElement.scrollTop;\n\t\t\t\tthis.fakeElem.style.top = yPosition + 'px';\n\n\t\t\t\tthis.fakeElem.setAttribute('readonly', '');\n\t\t\t\tthis.fakeElem.value = this.text;\n\n\t\t\t\tthis.container.appendChild(this.fakeElem);\n\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.fakeElem);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'removeFake',\n\t\t\tvalue: function removeFake() {\n\t\t\t\tif (this.fakeHandler) {\n\t\t\t\t\tthis.container.removeEventListener('click', this.fakeHandlerCallback);\n\t\t\t\t\tthis.fakeHandler = null;\n\t\t\t\t\tthis.fakeHandlerCallback = null;\n\t\t\t\t}\n\n\t\t\t\tif (this.fakeElem) {\n\t\t\t\t\tthis.container.removeChild(this.fakeElem);\n\t\t\t\t\tthis.fakeElem = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectTarget',\n\t\t\tvalue: function selectTarget() {\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.target);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'copyText',\n\t\t\tvalue: function copyText() {\n\t\t\t\tvar succeeded = void 0;\n\n\t\t\t\ttry {\n\t\t\t\t\tsucceeded = document.execCommand(this.action);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tsucceeded = false;\n\t\t\t\t}\n\n\t\t\t\tthis.handleResult(succeeded);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'handleResult',\n\t\t\tvalue: function handleResult(succeeded) {\n\t\t\t\tthis.emitter.emit(succeeded ? 'success' : 'error', {\n\t\t\t\t\taction: this.action,\n\t\t\t\t\ttext: this.selectedText,\n\t\t\t\t\ttrigger: this.trigger,\n\t\t\t\t\tclearSelection: this.clearSelection.bind(this)\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'clearSelection',\n\t\t\tvalue: function clearSelection() {\n\t\t\t\tif (this.trigger) {\n\t\t\t\t\tthis.trigger.focus();\n\t\t\t\t}\n\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.removeFake();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'action',\n\t\t\tset: function set() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n\t\t\t\tthis._action = action;\n\n\t\t\t\tif (this._action !== 'copy' && this._action !== 'cut') {\n\t\t\t\t\tthrow new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._action;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'target',\n\t\t\tset: function set(target) {\n\t\t\t\tif (target !== undefined) {\n\t\t\t\t\tif (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n\t\t\t\t\t\tif (this.action === 'copy' && target.hasAttribute('disabled')) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error('Invalid \"target\" value, use a valid Element');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._target;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJSAction;\n\t}();\n\n\tmodule.exports = ClipboardJSAction;\n});\n\n},{\"select\":5}],8:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n\t\tglobal.clipboard = mod.exports;\n\t}\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n\t'use strict';\n\n\tvar _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n\tvar _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n\tvar _goodListener2 = _interopRequireDefault(_goodListener);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tfunction _possibleConstructorReturn(self, call) {\n\t\tif (!self) {\n\t\t\tthrow new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t\t}\n\n\t\treturn call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n\t}\n\n\tfunction _inherits(subClass, superClass) {\n\t\tif (typeof superClass !== \"function\" && superClass !== null) {\n\t\t\tthrow new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n\t\t}\n\n\t\tsubClass.prototype = Object.create(superClass && superClass.prototype, {\n\t\t\tconstructor: {\n\t\t\t\tvalue: subClass,\n\t\t\t\tenumerable: false,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\t\tif (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n\t}\n\n\tvar ClipboardJS = function (_Emitter) {\n\t\t_inherits(ClipboardJS, _Emitter);\n\n\t\t/**\n\t\t * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJS(trigger, options) {\n\t\t\t_classCallCheck(this, ClipboardJS);\n\n\t\t\tvar _this = _possibleConstructorReturn(this, (ClipboardJS.__proto__ || Object.getPrototypeOf(ClipboardJS)).call(this));\n\n\t\t\t_this.resolveOptions(options);\n\t\t\t_this.listenClick(trigger);\n\t\t\treturn _this;\n\t\t}\n\n\t\t/**\n\t\t * Defines if attributes would be resolved using internal setter functions\n\t\t * or custom functions that were passed in the constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJS, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n\t\t\t\tthis.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n\t\t\t\tthis.text = typeof options.text === 'function' ? options.text : this.defaultText;\n\t\t\t\tthis.container = _typeof(options.container) === 'object' ? options.container : document.body;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'listenClick',\n\t\t\tvalue: function listenClick(trigger) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tthis.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n\t\t\t\t\treturn _this2.onClick(e);\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'onClick',\n\t\t\tvalue: function onClick(e) {\n\t\t\t\tvar trigger = e.delegateTarget || e.currentTarget;\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\n\t\t\t\tthis.clipboardAction = new _clipboardAction2.default({\n\t\t\t\t\taction: this.action(trigger),\n\t\t\t\t\ttarget: this.target(trigger),\n\t\t\t\t\ttext: this.text(trigger),\n\t\t\t\t\tcontainer: this.container,\n\t\t\t\t\ttrigger: trigger,\n\t\t\t\t\temitter: this\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultAction',\n\t\t\tvalue: function defaultAction(trigger) {\n\t\t\t\treturn getAttributeValue('action', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultTarget',\n\t\t\tvalue: function defaultTarget(trigger) {\n\t\t\t\tvar selector = getAttributeValue('target', trigger);\n\n\t\t\t\tif (selector) {\n\t\t\t\t\treturn document.querySelector(selector);\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultText',\n\t\t\tvalue: function defaultText(trigger) {\n\t\t\t\treturn getAttributeValue('text', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.listener.destroy();\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction.destroy();\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}], [{\n\t\t\tkey: 'isSupported',\n\t\t\tvalue: function isSupported() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n\t\t\t\tvar actions = typeof action === 'string' ? [action] : action;\n\t\t\t\tvar support = !!document.queryCommandSupported;\n\n\t\t\t\tactions.forEach(function (action) {\n\t\t\t\t\tsupport = support && !!document.queryCommandSupported(action);\n\t\t\t\t});\n\n\t\t\t\treturn support;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJS;\n\t}(_tinyEmitter2.default);\n\n\t/**\n\t * Helper function to retrieve attribute value.\n\t * @param {String} suffix\n\t * @param {Element} element\n\t */\n\tfunction getAttributeValue(suffix, element) {\n\t\tvar attribute = 'data-clipboard-' + suffix;\n\n\t\tif (!element.hasAttribute(attribute)) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn element.getAttribute(attribute);\n\t}\n\n\tmodule.exports = ClipboardJS;\n});\n\n},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)\n});\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* global NodeList, Element, define */\n\n(function (global) {\n 'use strict';\n\n var FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n var TAB_KEY = 9;\n var ESCAPE_KEY = 27;\n var focusedBeforeDialog;\n\n /**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} node\n * @param {(NodeList | Element | string)} targets\n */\n function A11yDialog (node, targets) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n // Keep a reference of the node on the instance\n this.node = node;\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create(targets);\n }\n\n /**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\n A11yDialog.prototype.create = function (targets) {\n // Keep a collection of nodes to disable/enable when toggling the dialog\n this._targets = this._targets || collect(targets) || getSiblings(this.node);\n\n // Make sure the dialog element is disabled on load, and that the `shown`\n // property is synced with its value\n this.node.setAttribute('aria-hidden', true);\n this.shown = false;\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this.node.id + '\"]');\n this._openers.forEach(function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this));\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n this._closers = $$('[data-a11y-dialog-hide]', this.node)\n .concat($$('[data-a11y-dialog-hide=\"' + this.node.id + '\"]'));\n this._closers.forEach(function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this;\n };\n\n /**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this;\n }\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n var content = this.node.getElementsByClassName('sui-dialog-content');\n content[0].className = 'sui-dialog-content sui-bounce-in';\n overlay[0].className = 'sui-dialog-overlay sui-fade-in';\n\n this.shown = true;\n this.node.removeAttribute('aria-hidden');\n\n // Iterate over the targets to disable them by setting their `aria-hidden`\n // attribute to `true`; in case they already have this attribute, keep a\n // reference of their original value to be able to restore it later\n this._targets.forEach(function (target) {\n var original = target.getAttribute('aria-hidden');\n\n if (original) {\n target.setAttribute('data-a11y-dialog-original', original);\n }\n\n target.setAttribute('aria-hidden', 'true');\n });\n\n // Keep a reference to the currently focused element to be able to restore\n // it later, then set the focus to the first focusable child of the dialog\n // element\n focusedBeforeDialog = document.activeElement;\n setFocusToFirstItem(this.node);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this;\n };\n\n /**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this;\n }\n\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n\n var content = this.node.getElementsByClassName('sui-dialog-content');\n\n content[0].className = 'sui-dialog-content sui-bounce-out';\n\n overlay[0].className = 'sui-dialog-overlay sui-fade-out';\n\n this.shown = false;\n // This has been set so there is enough time for the animation to show\n var timeout_node = this.node;\n setTimeout(function () {\n\t\ttimeout_node.setAttribute('aria-hidden', 'true');\n\t}, 300);\n\n // Iterate over the targets to enable them by remove their `aria-hidden`\n // attribute or resetting them to their initial value\n this._targets.forEach(function (target) {\n var original = target.getAttribute('data-a11y-dialog-original');\n\n\n if (original) {\n target.setAttribute('aria-hidden', original);\n target.removeAttribute('data-a11y-dialog-original');\n } else {\n target.removeAttribute('aria-hidden');\n }\n });\n\n // If their was a focused element before the dialog was opened, restore the\n // focus back to it\n if (focusedBeforeDialog) {\n focusedBeforeDialog.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this;\n };\n\n /**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\n A11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this));\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this;\n };\n\n /**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this;\n };\n\n /**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.off = function (type, handler) {\n var index = this._listeners[type].indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this;\n };\n\n /**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any).\n *\n * @access private\n * @param {string} type\n * @param {Event} event\n */\n A11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n\n listeners.forEach(function (listener) {\n listener(this.node, event);\n }.bind(this));\n };\n\n /**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._bindKeypress = function (event) {\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog\n if (this.shown && event.which === ESCAPE_KEY) {\n event.preventDefault();\n this.hide();\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.which === TAB_KEY) {\n trapTabKey(this.node, event);\n }\n };\n\n /**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within the dialog element,\n // move it back to its first focusable child\n if (this.shown && !this.node.contains(event.target)) {\n setFocusToFirstItem(this.node);\n }\n };\n\n /**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array<Element>}\n */\n function toArray (collection) {\n return Array.prototype.slice.call(collection);\n }\n\n /**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array<Element>}\n */\n function $$ (selector, context) {\n return toArray((context || document).querySelectorAll(selector));\n }\n\n /**\n * Return an array of Element based on given argument (NodeList, Element or\n * string representing a selector)\n *\n * @param {(NodeList | Element | string)} target\n * @return {Array<Element>}\n */\n function collect (target) {\n if (NodeList.prototype.isPrototypeOf(target)) {\n return toArray(target);\n }\n\n if (Element.prototype.isPrototypeOf(target)) {\n return [target];\n }\n\n if (typeof target === 'string') {\n return $$(target);\n }\n }\n\n /**\n * Set the focus to the first focusable child of the given element\n *\n * @param {Element} node\n */\n function setFocusToFirstItem (node) {\n var focusableChildren = getFocusableChildren(node);\n\n if (focusableChildren.length) {\n focusableChildren[0].focus();\n }\n }\n\n /**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getFocusableChildren (node) {\n return $$(FOCUSABLE_ELEMENTS.join(','), node).filter(function (child) {\n return !!(child.offsetWidth || child.offsetHeight || child.getClientRects().length);\n });\n }\n\n /**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\n function trapTabKey (node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (!event.shiftKey && focusedItemIndex === focusableChildren.length - 1) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n }\n\n /**\n * Retrieve siblings from given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getSiblings (node) {\n var nodes = toArray(node.parentNode.childNodes);\n var siblings = nodes.filter(function (node) {\n return node.nodeType === 1;\n });\n\n siblings.splice(siblings.indexOf(node), 1);\n\n return siblings;\n }\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = A11yDialog;\n } else if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return A11yDialog;\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof global === 'object') {\n global.A11yDialog = A11yDialog;\n }\n}(typeof global !== 'undefined' ? global : window));\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// admin.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 25ae4da958e7cc0546a0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 0\n// module chunks = 0","import '@wpmudev/shared-ui';\n\nconsole.log('This is the entry point.');\n\n\n\n// WEBPACK FOOTER //\n// ./_src/js/index.js","/*!\n * WPMU DEV Shared UI\n * Copyright 2018 Incsub (https://incsub.com)\n * Licensed under GPL v2 (http://www.gnu.org/licenses/gpl-2.0.html)\n */\n/* global NodeList, Element, define */\n\n(function (global) {\n 'use strict';\n\n var FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n var TAB_KEY = 9;\n var ESCAPE_KEY = 27;\n var focusedBeforeDialog;\n\n /**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} node\n * @param {(NodeList | Element | string)} targets\n */\n function A11yDialog (node, targets) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n // Keep a reference of the node on the instance\n this.node = node;\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create(targets);\n }\n\n /**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\n A11yDialog.prototype.create = function (targets) {\n // Keep a collection of nodes to disable/enable when toggling the dialog\n this._targets = this._targets || collect(targets) || getSiblings(this.node);\n\n // Make sure the dialog element is disabled on load, and that the `shown`\n // property is synced with its value\n this.node.setAttribute('aria-hidden', true);\n this.shown = false;\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this.node.id + '\"]');\n this._openers.forEach(function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this));\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n this._closers = $$('[data-a11y-dialog-hide]', this.node)\n .concat($$('[data-a11y-dialog-hide=\"' + this.node.id + '\"]'));\n this._closers.forEach(function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this;\n };\n\n /**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this;\n }\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n var content = this.node.getElementsByClassName('sui-dialog-content');\n content[0].className = 'sui-dialog-content sui-bounce-in';\n overlay[0].className = 'sui-dialog-overlay sui-fade-in';\n\n this.shown = true;\n this.node.removeAttribute('aria-hidden');\n\n // Iterate over the targets to disable them by setting their `aria-hidden`\n // attribute to `true`; in case they already have this attribute, keep a\n // reference of their original value to be able to restore it later\n this._targets.forEach(function (target) {\n var original = target.getAttribute('aria-hidden');\n\n if (original) {\n target.setAttribute('data-a11y-dialog-original', original);\n }\n\n target.setAttribute('aria-hidden', 'true');\n });\n\n // Keep a reference to the currently focused element to be able to restore\n // it later, then set the focus to the first focusable child of the dialog\n // element\n focusedBeforeDialog = document.activeElement;\n setFocusToFirstItem(this.node);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this;\n };\n\n /**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this;\n }\n\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n\n var content = this.node.getElementsByClassName('sui-dialog-content');\n\n content[0].className = 'sui-dialog-content sui-bounce-out';\n\n overlay[0].className = 'sui-dialog-overlay sui-fade-out';\n\n this.shown = false;\n // This has been set so there is enough time for the animation to show\n var timeout_node = this.node;\n setTimeout(function () {\n\t\ttimeout_node.setAttribute('aria-hidden', 'true');\n\t}, 300);\n\n // Iterate over the targets to enable them by remove their `aria-hidden`\n // attribute or resetting them to their initial value\n this._targets.forEach(function (target) {\n var original = target.getAttribute('data-a11y-dialog-original');\n\n\n if (original) {\n target.setAttribute('aria-hidden', original);\n target.removeAttribute('data-a11y-dialog-original');\n } else {\n target.removeAttribute('aria-hidden');\n }\n });\n\n // If their was a focused element before the dialog was opened, restore the\n // focus back to it\n if (focusedBeforeDialog) {\n focusedBeforeDialog.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this;\n };\n\n /**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\n A11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this));\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this;\n };\n\n /**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this;\n };\n\n /**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.off = function (type, handler) {\n var index = this._listeners[type].indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this;\n };\n\n /**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any).\n *\n * @access private\n * @param {string} type\n * @param {Event} event\n */\n A11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n\n listeners.forEach(function (listener) {\n listener(this.node, event);\n }.bind(this));\n };\n\n /**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._bindKeypress = function (event) {\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog\n if (this.shown && event.which === ESCAPE_KEY) {\n event.preventDefault();\n this.hide();\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.which === TAB_KEY) {\n trapTabKey(this.node, event);\n }\n };\n\n /**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within the dialog element,\n // move it back to its first focusable child\n if (this.shown && !this.node.contains(event.target)) {\n setFocusToFirstItem(this.node);\n }\n };\n\n /**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array<Element>}\n */\n function toArray (collection) {\n return Array.prototype.slice.call(collection);\n }\n\n /**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array<Element>}\n */\n function $$ (selector, context) {\n return toArray((context || document).querySelectorAll(selector));\n }\n\n /**\n * Return an array of Element based on given argument (NodeList, Element or\n * string representing a selector)\n *\n * @param {(NodeList | Element | string)} target\n * @return {Array<Element>}\n */\n function collect (target) {\n if (NodeList.prototype.isPrototypeOf(target)) {\n return toArray(target);\n }\n\n if (Element.prototype.isPrototypeOf(target)) {\n return [target];\n }\n\n if (typeof target === 'string') {\n return $$(target);\n }\n }\n\n /**\n * Set the focus to the first focusable child of the given element\n *\n * @param {Element} node\n */\n function setFocusToFirstItem (node) {\n var focusableChildren = getFocusableChildren(node);\n\n if (focusableChildren.length) {\n focusableChildren[0].focus();\n }\n }\n\n /**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getFocusableChildren (node) {\n return $$(FOCUSABLE_ELEMENTS.join(','), node).filter(function (child) {\n return !!(child.offsetWidth || child.offsetHeight || child.getClientRects().length);\n });\n }\n\n /**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\n function trapTabKey (node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (!event.shiftKey && focusedItemIndex === focusableChildren.length - 1) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n }\n\n /**\n * Retrieve siblings from given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getSiblings (node) {\n var nodes = toArray(node.parentNode.childNodes);\n var siblings = nodes.filter(function (node) {\n return node.nodeType === 1;\n });\n\n siblings.splice(siblings.indexOf(node), 1);\n\n return siblings;\n }\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = A11yDialog;\n } else if (typeof define === 'function' && define.amd) {\n define('A11yDialog', [], function () {\n return A11yDialog;\n });\n } else if (typeof global === 'object') {\n global.A11yDialog = A11yDialog;\n }\n}(typeof global !== 'undefined' ? global : window));\n\n( function( $ ) {\n\n\tvar accordionTable = $( '.sui-2-1-0 .sui-accordion' );\n\n\taccordionTable.on( 'click', '.sui-accordion-item', function() {\n\n\t\tvar getParentItem = $( this ).closest( '.sui-accordion-item' ),\n\t\t\tgetNextAdditionalContentRow = getParentItem.nextUntil( '.sui-accordion-item' );\n\n\t\tgetNextAdditionalContentRow.toggleClass( 'sui-accordion-item--open' );\n\n\t\tif ( getNextAdditionalContentRow.hasClass( 'sui-accordion-item--open' ) ) {\n\t\t\tgetParentItem.addClass( 'sui-accordion-item--open' );\n\t\t} else {\n\t\t\tgetParentItem.removeClass( 'sui-accordion-item--open' );\n\t\t}\n\n\t});\n\n}( jQuery ) );\n\n/**\n * clipboard.js v1.7.1\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT © Zeno Rocha\n */\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.ClipboardJS = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n\tvar proto = Element.prototype;\n\n\tproto.matches = proto.matchesSelector ||\n\t\t\t\t\tproto.mozMatchesSelector ||\n\t\t\t\t\tproto.msMatchesSelector ||\n\t\t\t\t\tproto.oMatchesSelector ||\n\t\t\t\t\tproto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest(element, selector) {\n\twhile (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n\t\tif (typeof element.matches === 'function' &&\n\t\t\telement.matches(selector)) {\n\t\t\treturn element;\n\t\t}\n\t\telement = element.parentNode;\n\t}\n}\n\nmodule.exports = closest;\n\n},{}],2:[function(require,module,exports){\nvar closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(element, selector, type, callback, useCapture) {\n\tvar listenerFn = listener.apply(this, arguments);\n\n\telement.addEventListener(type, listenerFn, useCapture);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\telement.removeEventListener(type, listenerFn, useCapture);\n\t\t}\n\t}\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n\treturn function(e) {\n\t\te.delegateTarget = closest(e.target, selector);\n\n\t\tif (e.delegateTarget) {\n\t\t\tcallback.call(element, e);\n\t\t}\n\t}\n}\n\nmodule.exports = delegate;\n\n},{\"./closest\":1}],3:[function(require,module,exports){\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n\treturn value !== undefined\n\t\t&& value instanceof HTMLElement\n\t\t&& value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn value !== undefined\n\t\t&& (type === '[object NodeList]' || type === '[object HTMLCollection]')\n\t\t&& ('length' in value)\n\t\t&& (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n\treturn typeof value === 'string'\n\t\t|| value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn type === '[object Function]';\n};\n\n},{}],4:[function(require,module,exports){\nvar is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n\tif (!target && !type && !callback) {\n\t\tthrow new Error('Missing required arguments');\n\t}\n\n\tif (!is.string(type)) {\n\t\tthrow new TypeError('Second argument must be a String');\n\t}\n\n\tif (!is.fn(callback)) {\n\t\tthrow new TypeError('Third argument must be a Function');\n\t}\n\n\tif (is.node(target)) {\n\t\treturn listenNode(target, type, callback);\n\t}\n\telse if (is.nodeList(target)) {\n\t\treturn listenNodeList(target, type, callback);\n\t}\n\telse if (is.string(target)) {\n\t\treturn listenSelector(target, type, callback);\n\t}\n\telse {\n\t\tthrow new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n\t}\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n\tnode.addEventListener(type, callback);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tnode.removeEventListener(type, callback);\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\tnode.addEventListener(type, callback);\n\t});\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\t\t\tnode.removeEventListener(type, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n\treturn delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n},{\"./is\":3,\"delegate\":2}],5:[function(require,module,exports){\nfunction select(element) {\n\tvar selectedText;\n\n\tif (element.nodeName === 'SELECT') {\n\t\telement.focus();\n\n\t\tselectedText = element.value;\n\t}\n\telse if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n\t\tvar isReadOnly = element.hasAttribute('readonly');\n\n\t\tif (!isReadOnly) {\n\t\t\telement.setAttribute('readonly', '');\n\t\t}\n\n\t\telement.select();\n\t\telement.setSelectionRange(0, element.value.length);\n\n\t\tif (!isReadOnly) {\n\t\t\telement.removeAttribute('readonly');\n\t\t}\n\n\t\tselectedText = element.value;\n\t}\n\telse {\n\t\tif (element.hasAttribute('contenteditable')) {\n\t\t\telement.focus();\n\t\t}\n\n\t\tvar selection = window.getSelection();\n\t\tvar range = document.createRange();\n\n\t\trange.selectNodeContents(element);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\n\t\tselectedText = selection.toString();\n\t}\n\n\treturn selectedText;\n}\n\nmodule.exports = select;\n\n},{}],6:[function(require,module,exports){\nfunction E () {\n\t// Keep this empty so it's easier to inherit from\n\t// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n\ton: function (name, callback, ctx) {\n\tvar e = this.e || (this.e = {});\n\n\t(e[name] || (e[name] = [])).push({\n\t\tfn: callback,\n\t\tctx: ctx\n\t});\n\n\treturn this;\n\t},\n\n\tonce: function (name, callback, ctx) {\n\tvar self = this;\n\tfunction listener () {\n\t\tself.off(name, listener);\n\t\tcallback.apply(ctx, arguments);\n\t};\n\n\tlistener._ = callback\n\treturn this.on(name, listener, ctx);\n\t},\n\n\temit: function (name) {\n\tvar data = [].slice.call(arguments, 1);\n\tvar evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n\tvar i = 0;\n\tvar len = evtArr.length;\n\n\tfor (i; i < len; i++) {\n\t\tevtArr[i].fn.apply(evtArr[i].ctx, data);\n\t}\n\n\treturn this;\n\t},\n\n\toff: function (name, callback) {\n\tvar e = this.e || (this.e = {});\n\tvar evts = e[name];\n\tvar liveEvents = [];\n\n\tif (evts && callback) {\n\t\tfor (var i = 0, len = evts.length; i < len; i++) {\n\t\tif (evts[i].fn !== callback && evts[i].fn._ !== callback)\n\t\t\tliveEvents.push(evts[i]);\n\t\t}\n\t}\n\n\t// Remove event from queue to prevent memory leak\n\t// Suggested by https://github.com/lazd\n\t// Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n\t(liveEvents.length)\n\t\t? e[name] = liveEvents\n\t\t: delete e[name];\n\n\treturn this;\n\t}\n};\n\nmodule.exports = E;\n\n},{}],7:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', 'select'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('select'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.select);\n\t\tglobal.clipboardAction = mod.exports;\n\t}\n})(this, function (module, _select) {\n\t'use strict';\n\n\tvar _select2 = _interopRequireDefault(_select);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tvar ClipboardJSAction = function () {\n\t\t/**\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJSAction(options) {\n\t\t\t_classCallCheck(this, ClipboardJSAction);\n\n\t\t\tthis.resolveOptions(options);\n\t\t\tthis.initSelection();\n\t\t}\n\n\t\t/**\n\t\t * Defines base properties passed from constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJSAction, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = options.action;\n\t\t\t\tthis.container = options.container;\n\t\t\t\tthis.emitter = options.emitter;\n\t\t\t\tthis.target = options.target;\n\t\t\t\tthis.text = options.text;\n\t\t\t\tthis.trigger = options.trigger;\n\n\t\t\t\tthis.selectedText = '';\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'initSelection',\n\t\t\tvalue: function initSelection() {\n\t\t\t\tif (this.text) {\n\t\t\t\t\tthis.selectFake();\n\t\t\t\t} else if (this.target) {\n\t\t\t\t\tthis.selectTarget();\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectFake',\n\t\t\tvalue: function selectFake() {\n\t\t\t\tvar _this = this;\n\n\t\t\t\tvar isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n\t\t\t\tthis.removeFake();\n\n\t\t\t\tthis.fakeHandlerCallback = function () {\n\t\t\t\t\treturn _this.removeFake();\n\t\t\t\t};\n\t\t\t\tthis.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n\t\t\t\tthis.fakeElem = document.createElement('textarea');\n\t\t\t\t// Prevent zooming on iOS\n\t\t\t\tthis.fakeElem.style.fontSize = '12pt';\n\t\t\t\t// Reset box model\n\t\t\t\tthis.fakeElem.style.border = '0';\n\t\t\t\tthis.fakeElem.style.padding = '0';\n\t\t\t\tthis.fakeElem.style.margin = '0';\n\t\t\t\t// Move element out of screen horizontally\n\t\t\t\tthis.fakeElem.style.position = 'absolute';\n\t\t\t\tthis.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n\t\t\t\t// Move element to the same position vertically\n\t\t\t\tvar yPosition = window.pageYOffset || document.documentElement.scrollTop;\n\t\t\t\tthis.fakeElem.style.top = yPosition + 'px';\n\n\t\t\t\tthis.fakeElem.setAttribute('readonly', '');\n\t\t\t\tthis.fakeElem.value = this.text;\n\n\t\t\t\tthis.container.appendChild(this.fakeElem);\n\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.fakeElem);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'removeFake',\n\t\t\tvalue: function removeFake() {\n\t\t\t\tif (this.fakeHandler) {\n\t\t\t\t\tthis.container.removeEventListener('click', this.fakeHandlerCallback);\n\t\t\t\t\tthis.fakeHandler = null;\n\t\t\t\t\tthis.fakeHandlerCallback = null;\n\t\t\t\t}\n\n\t\t\t\tif (this.fakeElem) {\n\t\t\t\t\tthis.container.removeChild(this.fakeElem);\n\t\t\t\t\tthis.fakeElem = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectTarget',\n\t\t\tvalue: function selectTarget() {\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.target);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'copyText',\n\t\t\tvalue: function copyText() {\n\t\t\t\tvar succeeded = void 0;\n\n\t\t\t\ttry {\n\t\t\t\t\tsucceeded = document.execCommand(this.action);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tsucceeded = false;\n\t\t\t\t}\n\n\t\t\t\tthis.handleResult(succeeded);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'handleResult',\n\t\t\tvalue: function handleResult(succeeded) {\n\t\t\t\tthis.emitter.emit(succeeded ? 'success' : 'error', {\n\t\t\t\t\taction: this.action,\n\t\t\t\t\ttext: this.selectedText,\n\t\t\t\t\ttrigger: this.trigger,\n\t\t\t\t\tclearSelection: this.clearSelection.bind(this)\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'clearSelection',\n\t\t\tvalue: function clearSelection() {\n\t\t\t\tif (this.trigger) {\n\t\t\t\t\tthis.trigger.focus();\n\t\t\t\t}\n\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.removeFake();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'action',\n\t\t\tset: function set() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n\t\t\t\tthis._action = action;\n\n\t\t\t\tif (this._action !== 'copy' && this._action !== 'cut') {\n\t\t\t\t\tthrow new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._action;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'target',\n\t\t\tset: function set(target) {\n\t\t\t\tif (target !== undefined) {\n\t\t\t\t\tif (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n\t\t\t\t\t\tif (this.action === 'copy' && target.hasAttribute('disabled')) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error('Invalid \"target\" value, use a valid Element');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._target;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJSAction;\n\t}();\n\n\tmodule.exports = ClipboardJSAction;\n});\n\n},{\"select\":5}],8:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n\t\tglobal.clipboard = mod.exports;\n\t}\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n\t'use strict';\n\n\tvar _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n\tvar _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n\tvar _goodListener2 = _interopRequireDefault(_goodListener);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tfunction _possibleConstructorReturn(self, call) {\n\t\tif (!self) {\n\t\t\tthrow new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t\t}\n\n\t\treturn call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n\t}\n\n\tfunction _inherits(subClass, superClass) {\n\t\tif (typeof superClass !== \"function\" && superClass !== null) {\n\t\t\tthrow new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n\t\t}\n\n\t\tsubClass.prototype = Object.create(superClass && superClass.prototype, {\n\t\t\tconstructor: {\n\t\t\t\tvalue: subClass,\n\t\t\t\tenumerable: false,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\t\tif (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n\t}\n\n\tvar ClipboardJS = function (_Emitter) {\n\t\t_inherits(ClipboardJS, _Emitter);\n\n\t\t/**\n\t\t * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJS(trigger, options) {\n\t\t\t_classCallCheck(this, ClipboardJS);\n\n\t\t\tvar _this = _possibleConstructorReturn(this, (ClipboardJS.__proto__ || Object.getPrototypeOf(ClipboardJS)).call(this));\n\n\t\t\t_this.resolveOptions(options);\n\t\t\t_this.listenClick(trigger);\n\t\t\treturn _this;\n\t\t}\n\n\t\t/**\n\t\t * Defines if attributes would be resolved using internal setter functions\n\t\t * or custom functions that were passed in the constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJS, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n\t\t\t\tthis.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n\t\t\t\tthis.text = typeof options.text === 'function' ? options.text : this.defaultText;\n\t\t\t\tthis.container = _typeof(options.container) === 'object' ? options.container : document.body;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'listenClick',\n\t\t\tvalue: function listenClick(trigger) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tthis.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n\t\t\t\t\treturn _this2.onClick(e);\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'onClick',\n\t\t\tvalue: function onClick(e) {\n\t\t\t\tvar trigger = e.delegateTarget || e.currentTarget;\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\n\t\t\t\tthis.clipboardAction = new _clipboardAction2.default({\n\t\t\t\t\taction: this.action(trigger),\n\t\t\t\t\ttarget: this.target(trigger),\n\t\t\t\t\ttext: this.text(trigger),\n\t\t\t\t\tcontainer: this.container,\n\t\t\t\t\ttrigger: trigger,\n\t\t\t\t\temitter: this\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultAction',\n\t\t\tvalue: function defaultAction(trigger) {\n\t\t\t\treturn getAttributeValue('action', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultTarget',\n\t\t\tvalue: function defaultTarget(trigger) {\n\t\t\t\tvar selector = getAttributeValue('target', trigger);\n\n\t\t\t\tif (selector) {\n\t\t\t\t\treturn document.querySelector(selector);\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultText',\n\t\t\tvalue: function defaultText(trigger) {\n\t\t\t\treturn getAttributeValue('text', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.listener.destroy();\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction.destroy();\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}], [{\n\t\t\tkey: 'isSupported',\n\t\t\tvalue: function isSupported() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n\t\t\t\tvar actions = typeof action === 'string' ? [action] : action;\n\t\t\t\tvar support = !!document.queryCommandSupported;\n\n\t\t\t\tactions.forEach(function (action) {\n\t\t\t\t\tsupport = support && !!document.queryCommandSupported(action);\n\t\t\t\t});\n\n\t\t\t\treturn support;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJS;\n\t}(_tinyEmitter2.default);\n\n\t/**\n\t * Helper function to retrieve attribute value.\n\t * @param {String} suffix\n\t * @param {Element} element\n\t */\n\tfunction getAttributeValue(suffix, element) {\n\t\tvar attribute = 'data-clipboard-' + suffix;\n\n\t\tif (!element.hasAttribute(attribute)) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn element.getAttribute(attribute);\n\t}\n\n\tmodule.exports = ClipboardJS;\n});\n\n},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)\n});\n\n( function( $ ) {\n\n\t$( '.sui-2-1-0 .sui-code-snippet:not(.sui-no-copy)' ).each( function( i ) {\n\t\tvar id = 'sui-code-snippet-' + i,\n\t\t\tbutton = '<button class=\"sui-button\" data-clipboard-target=\"#' + id + '\">Copy</button>';\n\n\t\t$( this ).wrap( '<div class=\"sui-code-snippet-wrapper\"></div>' );\n\t\t$( this ).attr( 'id', id ).after( button );\n\t});\n\n\t$( document ).ready( function() {\n\t\tvar btns = $( '[data-clipboard-target]' );\n\t\tvar clipboard = new ClipboardJS( '[data-clipboard-target]' );\n\n\t\tif ( btns.length ) {\n\n\t\t\tclipboard.on( 'success', function( e ) {\n\t\t\t\te.clearSelection();\n\t\t\t\tshowTooltip( e.trigger, 'Copied!' );\n\t\t\t});\n\n\t\t\tbtns.mouseleave( function() {\n\t\t\t\t$( this ).removeClass( 'sui-tooltip' );\n\t\t\t\t$( this ).removeAttr( 'aria-label' );\n\t\t\t\t$( this ).removeAttr( 'data-tooltip' );\n\t\t\t});\n\n\t\t\tfunction showTooltip( e, msg ) {\n\t\t\t\t$( e ).addClass( 'sui-tooltip' );\n\t\t\t\t$( e ).attr( 'aria-label', msg );\n\t\t\t\t$( e ).attr( 'data-tooltip', msg );\n\t\t\t}\n\n\t\t}\n\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tSUI.linkDropdown = function() {\n\n\t\tfunction closeAllDropdowns( $except ) {\n\t\t\tvar $dropdowns = $( '.sui-2-1-0 .sui-dropdown' );\n\n\t\t\tif ( $except ) {\n\t\t\t\t$dropdowns = $dropdowns.not( $except );\n\t\t\t}\n\n\t\t\t$dropdowns.removeClass( 'open' );\n\t\t}\n\n\t\t$( 'body' ).click( function( e ) {\n\t\t\tvar $this = $( e.target ),\n\t\t\t\t$el = $this.closest( '.sui-dropdown' );\n\n\t\t\tif ( 0 == $el.length ) {\n\t\t\t\tcloseAllDropdowns();\n\t\t\t} else if ( $this.is( 'a' ) ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tcloseAllDropdowns( $el );\n\n\t\t\t\t$el.toggleClass( 'open' );\n\t\t\t}\n\n\t\t});\n\n\t};\n\n\tSUI.linkDropdown();\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tdocument.addEventListener( 'DOMContentLoaded', function() {\n\t\tvar mainEl = $( '.sui-wrap' );\n\n\t\t// Init the dialog elements.\n\t\t$( '.sui-dialog' ).each( function() {\n\t\t\tnew A11yDialog( this, mainEl );\n\t\t});\n\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t$( '.sui-2-1-0 .sui-notice-top:not(.sui-cant-dismiss)' ).delay( 3000 ).slideUp( 'slow' );\n\n\t$( '.sui-2-1-0 .sui-notice-dismiss' ).click( function( e ) {\n\t\te.preventDefault();\n\n\t\t$( this ).parent( '.sui-notice' ).stop().slideUp( 'slow' );\n\n\t\treturn false;\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tSUI.showHidePassword = function() {\n\n\t\t$( '.sui-2-1-0 .sui-password-group' ).each( function() {\n\t\t\tvar $this = $( this ),\n\t\t\t\t$input = $this.find( 'input[type=\"password\"]' ),\n\t\t\t\t$button = $this.find( '.sui-password-toggle' );\n\n\t\t\t$button.on( 'click', function() {\n\t\t\t\tvar $inputType = '',\n\t\t\t\t\t$repInput = '';\n\n\t\t\t\t$( this ).toggleClass( 'is-visible' );\n\n\t\t\t\tif ( $input.hasClass( 'is-visible' ) ) {\n\t\t\t\t\t$input.removeClass( 'is-visible' ).addClass( 'is-hidden' );\n\t\t\t\t\t$inputType = 'password';\n\t\t\t\t\t$button.find( '> .sui-screen-reader-text' ).text( 'Show Password' );\n\t\t\t\t\t$button.find( '> i' ).removeClass( 'sui-ico-eye-hide' ).addClass( 'sui-ico-eye' );\n\t\t\t\t} else {\n\t\t\t\t\t$input.removeClass( 'is-hidden' ).addClass( 'is-visible' );\n\t\t\t\t\t$inputType = 'text';\n\t\t\t\t\t$button.find( '> .sui-screen-reader-text' ).text( 'Hide Password' );\n\t\t\t\t\t$button.find( '> i' ).removeClass( 'sui-ico-eye' ).addClass( 'sui-ico-eye-hide' );\n\t\t\t\t}\n\n\t\t\t\t$repInput = $( '<input type=' + $inputType + ' />' )\n\t\t\t\t\t.attr( 'id', $input.attr( 'id' ) )\n\t\t\t\t\t.attr( 'name', $input.attr( 'name' ) )\n\t\t\t\t\t.attr( 'class', $input.attr( 'class' ) )\n\t\t\t\t\t.val( $input.val() )\n\t\t\t\t\t.insertBefore( $input );\n\n\t\t\t\t$input.remove();\n\t\t\t\t$input = $repInput;\n\t\t\t\t$input.focus();\n\n\t\t\t});\n\n\t\t});\n\n\t};\n\n\tSUI.showHidePassword();\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\tloadCircleScore = function( el ) {\n\t\tvar dial = $( el ).find( 'svg circle:last-child' ),\n\t\t\tscore = $( el ).data( 'score' ),\n\t\t\tradius = 42,\n\t\t\tcircumference = 2 * Math.PI * radius,\n\t\t\tdashLength = ( circumference / 100 ) * score,\n\t\t\tgapLength = dashLength * 100 - score,\n\t\t\tsvg =\n\t\t\t\t'<svg viewbox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\\n' +\n\t\t\t\t\t'<circle stroke-width=\"16\" cx=\"50\" cy=\"50\" r=\"42\" />\\n' +\n\t\t\t\t\t'<circle stroke-width=\"16\" cx=\"50\" cy=\"50\" r=\"42\" stroke-dasharray=\"0,' + gapLength + '\" />\\n' +\n\t\t\t\t'</svg>\\n' +\n\t\t\t\t'<span class=\"sui-circle-score-label\">' + score + '</span>\\n';\n\n\t\t// Add svg to score element, add loaded class, & change stroke-dasharray to represent target score/percentage.\n\t\t$( el ).prepend( svg ).addClass( 'loaded' ).find( 'circle:last-child' ).css( 'animation', 'sui' + score + ' 3s forwards' );\n\t};\n\n\t$( '.sui-2-1-0 .sui-circle-score' ).each( function() {\n\t\tloadCircleScore( this );\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\tsuiSelect = function( el ) {\n\t\tvar jq = $( el ),\n\t\t\twrap, handle, list, value, items;\n\n\t\tif ( ! jq.is( 'select' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( jq.closest( '.select-container' ).length || jq.data( 'select2' ) || jq.is( '.none-sui' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Add the DOM elements to style the select list.\n\t\tfunction setupElement() {\n\t\t\tjq.wrap( '<div class=\"select-container\">' );\n\t\t\tjq.hide();\n\n\t\t\twrap = jq.parent();\n\t\t\thandle = $( '<span class=\"dropdown-handle\"><i class=\"sui-icon-chevron-down\" aria-hidden=\"true\"></i></span>' ).prependTo( wrap );\n\t\t\tlist = $( '<div class=\"select-list-container\"></div>' ).appendTo( wrap );\n\t\t\tvalue = $( '<div class=\"list-value\">&nbsp;</div>' ).appendTo( list );\n\t\t\titems = $( '<ul class=\"list-results\"></ul>' ).appendTo( list );\n\n\t\t\twrap.addClass( jq.attr( 'class' ) );\n\t\t}\n\n\t\t// When changing selection using JS, you need to trigger a 'sui:change' event\n\t\t// eg: $('select').val('4').trigger('sui:change')\n\t\tfunction handleSelectionChange() {\n\t\t\tjq.on( 'sui:change', function() {\n\n\t\t\t\t// We need to re-populateList to handle dynamic select options added via JS/ajax.\n\t\t\t\tpopulateList();\n\t\t\t\titems.find( 'li' ).not( '.optgroup-label' ).on( 'click', function onItemClick( ev ) {\n\t\t\t\t\tvar opt = $( ev.target );\n\t\t\t\t\tselectItem( opt, false );\n\t\t\t\t\thandleValue();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Add all the options to the new DOM elements.\n\t\tfunction populateList() {\n\t\t\titems.empty();\n\t\t\tif ( jq.find( 'optgroup' ).length ) {\n\t\t\t\tjq.find( 'optgroup' ).each( function() {\n\t\t\t\t\tvar optgroup = $( this ),\n\t\t\t\t\t\toptGroupItem;\n\t\t\t\t\toptGroupItem = $( '<ul></ul>' ).appendTo( items );\n\t\t\t\t\t$label = $( '<li class=\"optgroup-label\"></li>' ).text( optgroup.prop( 'label' ) );\n\n\t\t\t\t\toptGroupItem.html( $label );\n\t\t\t\t\toptGroupItem.addClass( 'optgroup' );\n\n\t\t\t\t\toptgroup.find( 'option' ).each( function onPopulateLoop() {\n\t\t\t\t\t\tvar opt = $( this ),\n\t\t\t\t\t\t\titem;\n\t\t\t\t\t\titem = $( '<li></li>' ).appendTo( optGroupItem );\n\t\t\t\t\t\titem.text( opt.text() );\n\t\t\t\t\t\titem.data( 'value', opt.val() );\n\n\t\t\t\t\t\tif ( opt.val() == jq.val() ) {\n\t\t\t\t\t\t\tselectItem( item );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tjq.find( 'option' ).each( function onPopulateLoop() {\n\t\t\t\t\tvar opt = $( this ),\n\t\t\t\t\t\titem;\n\t\t\t\t\titem = $( '<li></li>' ).appendTo( items );\n\t\t\t\t\titem.text( opt.text() );\n\t\t\t\t\titem.data( 'value', opt.val() );\n\n\t\t\t\t\tif ( opt.val() == jq.val() ) {\n\t\t\t\t\t\tselectItem( item, true );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t}\n\n\t\t// Checks the option value for a link.\n\t\tfunction handleValue() {\n\t\t\tvar val = jq[0].value;\n\n\t\t\t// If option is link, navigate to it.\n\t\t\tif ( val.match( '^https?:\\/\\/|#' ) ) {\n\t\t\t\twindow.location.href = val;\n\t\t\t}\n\t\t}\n\n\t\t// Toggle the dropdown state between open/closed.\n\t\tfunction stateToggle() {\n\t\t\tif ( wrap.find( 'select' ).is( ':disabled' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( ! wrap.hasClass( 'active' ) ) {\n\t\t\t\tstateOpen();\n\t\t\t} else {\n\t\t\t\tstateClose();\n\t\t\t}\n\t\t}\n\n\t\t// Close the dropdown list.\n\t\tfunction stateClose( item ) {\n\t\t\tif ( ! item ) {\n\t\t\t\titem = wrap;\n\t\t\t}\n\n\t\t\titem.removeClass( 'active' );\n\t\t\titem.closest( 'tr' ).removeClass( 'select-open' );\n\t\t}\n\n\t\t// Open the dropdown list.\n\t\tfunction stateOpen() {\n\t\t\t$( '.select-container.active' ).each( function() {\n\t\t\t\tstateClose( $( this ) );\n\t\t\t});\n\n\t\t\twrap.addClass( 'active' );\n\t\t\twrap.closest( 'tr' ).addClass( 'select-open' );\n\t\t}\n\n\t\t// Visually mark the specified option as \"selected\".\n\t\tfunction selectItem( opt, isInit ) {\n\t\t\tisInit = 'undefined' === typeof isInit ? false : isInit;\n\t\t\tvalue.text( opt.text() );\n\t\t\t$( '.current', items ).removeClass( 'current' );\n\t\t\topt.addClass( 'current' );\n\t\t\tstateClose();\n\n\t\t\t// Also update the select list value.\n\t\t\tjq.val( opt.data( 'value' ) );\n\n\t\t\tif ( ! isInit ) {\n\t\t\t\tjq.trigger( 'change' );\n\t\t\t}\n\n\t\t}\n\n\t\t// Element constructor.\n\t\tfunction init() {\n\t\t\tvar selectID;\n\n\t\t\tsetupElement();\n\t\t\tpopulateList();\n\t\t\thandleSelectionChange();\n\n\t\t\titems.find( 'li' ).not( '.optgroup-label' ).on( 'click', function onItemClick( ev ) {\n\t\t\t\tvar opt = $( ev.target );\n\t\t\t\tselectItem( opt, false );\n\t\t\t\thandleValue();\n\t\t\t});\n\n\t\t\thandle.on( 'click', stateToggle );\n\t\t\tvalue.on( 'click', stateToggle );\n\t\t\tjq.on( 'focus', stateOpen );\n\n\t\t\t$( document ).click( function onOutsideClick( ev ) {\n\t\t\t\tvar jq = $( ev.target ),\n\t\t\t\t\tselectID;\n\n\t\t\t\tif ( jq.closest( '.select-container' ).length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( jq.is( 'label' ) && jq.attr( 'for' ) ) {\n\t\t\t\t\tselectID = jq.attr( 'for' );\n\n\t\t\t\t\tif ( $( 'select#' + selectID ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstateClose();\n\t\t\t});\n\n\t\t\tselectID = jq.attr( 'id' );\n\n\t\t\tif ( selectID ) {\n\t\t\t\t$( 'label[for=' + selectID + ']' ).on( 'click', stateOpen );\n\t\t\t}\n\n\t\t\tjq.addClass( 'sui-styled' );\n\t\t}\n\n\t\tinit();\n\n\t\treturn this;\n\t};\n\n\t// Convert all select lists to fancy sui Select lists.\n\t$( '.sui-2-1-0 select' ).each( function() {\n\t\tsuiSelect( this );\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\tsuiTabs = function( el ) {\n\t\tvar jq = $( el ).closest( '.sui-tabs' );\n\n\t\tif ( ! jq.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Resize the tab-area after short delay.\n\t\tfunction resizeArea() {\n\t\t\twindow.setTimeout( resizeAreaHandler, 20 );\n\t\t}\n\n\t\t// Resize the tab area to match the current tab.\n\t\tfunction resizeAreaHandler() {\n\t\t\tvar current = jq.find( '.sui-tab > input:checked' ).parent(),\n\t\t\t\tcontent = current.find( '.sui-tab-content' );\n\n\t\t\tjq.height( content.outerHeight() + current.outerHeight() - 6 );\n\t\t}\n\n\t\t// Updates the URL hash to keep tab open during page refresh\n\t\tfunction updateHash() {\n\t\t\tvar current = jq.find( '.sui-tab > input:checked' );\n\n\t\t\tjq.find( '.sui-tab label.active' ).removeClass( 'active' );\n\t\t\tcurrent.parent().find( 'label' ).addClass( 'active' );\n\n\t\t\tresizeArea();\n\t\t}\n\n\t\t// Open the tab that is specified in window URL hash\n\t\tfunction switchTab() {\n\t\t\tvar curTab,\n\t\t\t\troute = window.location.hash.replace( /[^\\w-_]/g, '' );\n\n\t\t\tif ( route ) {\n\t\t\t\tcurTab = jq.find( 'input#' + route );\n\n\t\t\t\tif ( curTab.parent().find( 'label' ).length ) {\n\t\t\t\t\tjq.find( '.sui-tab label.active' ).removeClass( 'active' );\n\t\t\t\t\tcurTab.parent().find( 'label' ).addClass( 'active' );\n\n\t\t\t\t\tif ( curTab.length && ! curTab.prop( 'checked' ) ) {\n\t\t\t\t\t\tcurTab.prop( 'checked', true );\n\n\t\t\t\t\t\tscrollWindow();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Scroll the window to top of the tab list.\n\t\tfunction scrollWindow() {\n\t\t\tresizeArea();\n\n\t\t\t$( 'html, body' ).scrollTop(\n\t\t\t\tjq.offset().top -\n\t\t\t\tparseInt( $( 'html' ).css( 'paddingTop' ) ) -\n\t\t\t\t20\n\t\t\t);\n\t\t}\n\n\t\t// Constructor.\n\t\tfunction init() {\n\t\t\tvar current = jq.find( '.sui-tab > input:checked' );\n\n\t\t\tjq.on( 'click', '.sui-tab > input[type=radio]', updateHash );\n\t\t\t$( window ).on( 'hashchange', switchTab );\n\t\t\tcurrent.parent().find( 'label' ).addClass( 'active' );\n\n\t\t\tresizeArea();\n\t\t\tswitchTab();\n\t\t}\n\n\t\tinit();\n\n\t\t$( window ).resize( function() {\n\t\t\tresizeArea();\n\t\t});\n\n\t\treturn this;\n\t};\n\n\t// Initialize all tab-areas.\n\t$( '.sui-2-1-0 .sui-tabs' ).each( function() {\n\t\tsuiTabs( this );\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tSUI.upload = function() {\n\n\t\t$( '.sui-2-1-0 .sui-upload-group input[type=\"file\"]' ).on( 'change', function( e ) {\n\t\t\tvar file = $( this )[0].files[0],\n\t\t\t\tmessage = $( this ).find( '~ .sui-upload-message' );\n\n\t\t\tif ( file ) {\n\t\t\t\tmessage.text( file.name );\n\t\t\t}\n\n\t\t});\n\n\t};\n\n\tSUI.upload();\n\n}( jQuery ) );\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@wpmudev/shared-ui/dist/js/shared-ui.js\n// module id = 2\n// module chunks = 0","/**\n * clipboard.js v1.7.1\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT © Zeno Rocha\n */\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.ClipboardJS = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n\tvar proto = Element.prototype;\n\n\tproto.matches = proto.matchesSelector ||\n\t\t\t\t\tproto.mozMatchesSelector ||\n\t\t\t\t\tproto.msMatchesSelector ||\n\t\t\t\t\tproto.oMatchesSelector ||\n\t\t\t\t\tproto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest(element, selector) {\n\twhile (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n\t\tif (typeof element.matches === 'function' &&\n\t\t\telement.matches(selector)) {\n\t\t\treturn element;\n\t\t}\n\t\telement = element.parentNode;\n\t}\n}\n\nmodule.exports = closest;\n\n},{}],2:[function(require,module,exports){\nvar closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(element, selector, type, callback, useCapture) {\n\tvar listenerFn = listener.apply(this, arguments);\n\n\telement.addEventListener(type, listenerFn, useCapture);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\telement.removeEventListener(type, listenerFn, useCapture);\n\t\t}\n\t}\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n\treturn function(e) {\n\t\te.delegateTarget = closest(e.target, selector);\n\n\t\tif (e.delegateTarget) {\n\t\t\tcallback.call(element, e);\n\t\t}\n\t}\n}\n\nmodule.exports = delegate;\n\n},{\"./closest\":1}],3:[function(require,module,exports){\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n\treturn value !== undefined\n\t\t&& value instanceof HTMLElement\n\t\t&& value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn value !== undefined\n\t\t&& (type === '[object NodeList]' || type === '[object HTMLCollection]')\n\t\t&& ('length' in value)\n\t\t&& (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n\treturn typeof value === 'string'\n\t\t|| value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn type === '[object Function]';\n};\n\n},{}],4:[function(require,module,exports){\nvar is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n\tif (!target && !type && !callback) {\n\t\tthrow new Error('Missing required arguments');\n\t}\n\n\tif (!is.string(type)) {\n\t\tthrow new TypeError('Second argument must be a String');\n\t}\n\n\tif (!is.fn(callback)) {\n\t\tthrow new TypeError('Third argument must be a Function');\n\t}\n\n\tif (is.node(target)) {\n\t\treturn listenNode(target, type, callback);\n\t}\n\telse if (is.nodeList(target)) {\n\t\treturn listenNodeList(target, type, callback);\n\t}\n\telse if (is.string(target)) {\n\t\treturn listenSelector(target, type, callback);\n\t}\n\telse {\n\t\tthrow new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n\t}\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n\tnode.addEventListener(type, callback);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tnode.removeEventListener(type, callback);\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\tnode.addEventListener(type, callback);\n\t});\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\t\t\tnode.removeEventListener(type, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n\treturn delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n},{\"./is\":3,\"delegate\":2}],5:[function(require,module,exports){\nfunction select(element) {\n\tvar selectedText;\n\n\tif (element.nodeName === 'SELECT') {\n\t\telement.focus();\n\n\t\tselectedText = element.value;\n\t}\n\telse if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n\t\tvar isReadOnly = element.hasAttribute('readonly');\n\n\t\tif (!isReadOnly) {\n\t\t\telement.setAttribute('readonly', '');\n\t\t}\n\n\t\telement.select();\n\t\telement.setSelectionRange(0, element.value.length);\n\n\t\tif (!isReadOnly) {\n\t\t\telement.removeAttribute('readonly');\n\t\t}\n\n\t\tselectedText = element.value;\n\t}\n\telse {\n\t\tif (element.hasAttribute('contenteditable')) {\n\t\t\telement.focus();\n\t\t}\n\n\t\tvar selection = window.getSelection();\n\t\tvar range = document.createRange();\n\n\t\trange.selectNodeContents(element);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\n\t\tselectedText = selection.toString();\n\t}\n\n\treturn selectedText;\n}\n\nmodule.exports = select;\n\n},{}],6:[function(require,module,exports){\nfunction E () {\n\t// Keep this empty so it's easier to inherit from\n\t// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n\ton: function (name, callback, ctx) {\n\tvar e = this.e || (this.e = {});\n\n\t(e[name] || (e[name] = [])).push({\n\t\tfn: callback,\n\t\tctx: ctx\n\t});\n\n\treturn this;\n\t},\n\n\tonce: function (name, callback, ctx) {\n\tvar self = this;\n\tfunction listener () {\n\t\tself.off(name, listener);\n\t\tcallback.apply(ctx, arguments);\n\t};\n\n\tlistener._ = callback\n\treturn this.on(name, listener, ctx);\n\t},\n\n\temit: function (name) {\n\tvar data = [].slice.call(arguments, 1);\n\tvar evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n\tvar i = 0;\n\tvar len = evtArr.length;\n\n\tfor (i; i < len; i++) {\n\t\tevtArr[i].fn.apply(evtArr[i].ctx, data);\n\t}\n\n\treturn this;\n\t},\n\n\toff: function (name, callback) {\n\tvar e = this.e || (this.e = {});\n\tvar evts = e[name];\n\tvar liveEvents = [];\n\n\tif (evts && callback) {\n\t\tfor (var i = 0, len = evts.length; i < len; i++) {\n\t\tif (evts[i].fn !== callback && evts[i].fn._ !== callback)\n\t\t\tliveEvents.push(evts[i]);\n\t\t}\n\t}\n\n\t// Remove event from queue to prevent memory leak\n\t// Suggested by https://github.com/lazd\n\t// Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n\t(liveEvents.length)\n\t\t? e[name] = liveEvents\n\t\t: delete e[name];\n\n\treturn this;\n\t}\n};\n\nmodule.exports = E;\n\n},{}],7:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', 'select'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('select'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.select);\n\t\tglobal.clipboardAction = mod.exports;\n\t}\n})(this, function (module, _select) {\n\t'use strict';\n\n\tvar _select2 = _interopRequireDefault(_select);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tvar ClipboardJSAction = function () {\n\t\t/**\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJSAction(options) {\n\t\t\t_classCallCheck(this, ClipboardJSAction);\n\n\t\t\tthis.resolveOptions(options);\n\t\t\tthis.initSelection();\n\t\t}\n\n\t\t/**\n\t\t * Defines base properties passed from constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJSAction, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = options.action;\n\t\t\t\tthis.container = options.container;\n\t\t\t\tthis.emitter = options.emitter;\n\t\t\t\tthis.target = options.target;\n\t\t\t\tthis.text = options.text;\n\t\t\t\tthis.trigger = options.trigger;\n\n\t\t\t\tthis.selectedText = '';\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'initSelection',\n\t\t\tvalue: function initSelection() {\n\t\t\t\tif (this.text) {\n\t\t\t\t\tthis.selectFake();\n\t\t\t\t} else if (this.target) {\n\t\t\t\t\tthis.selectTarget();\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectFake',\n\t\t\tvalue: function selectFake() {\n\t\t\t\tvar _this = this;\n\n\t\t\t\tvar isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n\t\t\t\tthis.removeFake();\n\n\t\t\t\tthis.fakeHandlerCallback = function () {\n\t\t\t\t\treturn _this.removeFake();\n\t\t\t\t};\n\t\t\t\tthis.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n\t\t\t\tthis.fakeElem = document.createElement('textarea');\n\t\t\t\t// Prevent zooming on iOS\n\t\t\t\tthis.fakeElem.style.fontSize = '12pt';\n\t\t\t\t// Reset box model\n\t\t\t\tthis.fakeElem.style.border = '0';\n\t\t\t\tthis.fakeElem.style.padding = '0';\n\t\t\t\tthis.fakeElem.style.margin = '0';\n\t\t\t\t// Move element out of screen horizontally\n\t\t\t\tthis.fakeElem.style.position = 'absolute';\n\t\t\t\tthis.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n\t\t\t\t// Move element to the same position vertically\n\t\t\t\tvar yPosition = window.pageYOffset || document.documentElement.scrollTop;\n\t\t\t\tthis.fakeElem.style.top = yPosition + 'px';\n\n\t\t\t\tthis.fakeElem.setAttribute('readonly', '');\n\t\t\t\tthis.fakeElem.value = this.text;\n\n\t\t\t\tthis.container.appendChild(this.fakeElem);\n\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.fakeElem);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'removeFake',\n\t\t\tvalue: function removeFake() {\n\t\t\t\tif (this.fakeHandler) {\n\t\t\t\t\tthis.container.removeEventListener('click', this.fakeHandlerCallback);\n\t\t\t\t\tthis.fakeHandler = null;\n\t\t\t\t\tthis.fakeHandlerCallback = null;\n\t\t\t\t}\n\n\t\t\t\tif (this.fakeElem) {\n\t\t\t\t\tthis.container.removeChild(this.fakeElem);\n\t\t\t\t\tthis.fakeElem = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectTarget',\n\t\t\tvalue: function selectTarget() {\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.target);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'copyText',\n\t\t\tvalue: function copyText() {\n\t\t\t\tvar succeeded = void 0;\n\n\t\t\t\ttry {\n\t\t\t\t\tsucceeded = document.execCommand(this.action);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tsucceeded = false;\n\t\t\t\t}\n\n\t\t\t\tthis.handleResult(succeeded);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'handleResult',\n\t\t\tvalue: function handleResult(succeeded) {\n\t\t\t\tthis.emitter.emit(succeeded ? 'success' : 'error', {\n\t\t\t\t\taction: this.action,\n\t\t\t\t\ttext: this.selectedText,\n\t\t\t\t\ttrigger: this.trigger,\n\t\t\t\t\tclearSelection: this.clearSelection.bind(this)\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'clearSelection',\n\t\t\tvalue: function clearSelection() {\n\t\t\t\tif (this.trigger) {\n\t\t\t\t\tthis.trigger.focus();\n\t\t\t\t}\n\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.removeFake();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'action',\n\t\t\tset: function set() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n\t\t\t\tthis._action = action;\n\n\t\t\t\tif (this._action !== 'copy' && this._action !== 'cut') {\n\t\t\t\t\tthrow new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._action;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'target',\n\t\t\tset: function set(target) {\n\t\t\t\tif (target !== undefined) {\n\t\t\t\t\tif (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n\t\t\t\t\t\tif (this.action === 'copy' && target.hasAttribute('disabled')) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error('Invalid \"target\" value, use a valid Element');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._target;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJSAction;\n\t}();\n\n\tmodule.exports = ClipboardJSAction;\n});\n\n},{\"select\":5}],8:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n\t\tglobal.clipboard = mod.exports;\n\t}\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n\t'use strict';\n\n\tvar _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n\tvar _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n\tvar _goodListener2 = _interopRequireDefault(_goodListener);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tfunction _possibleConstructorReturn(self, call) {\n\t\tif (!self) {\n\t\t\tthrow new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t\t}\n\n\t\treturn call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n\t}\n\n\tfunction _inherits(subClass, superClass) {\n\t\tif (typeof superClass !== \"function\" && superClass !== null) {\n\t\t\tthrow new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n\t\t}\n\n\t\tsubClass.prototype = Object.create(superClass && superClass.prototype, {\n\t\t\tconstructor: {\n\t\t\t\tvalue: subClass,\n\t\t\t\tenumerable: false,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\t\tif (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n\t}\n\n\tvar ClipboardJS = function (_Emitter) {\n\t\t_inherits(ClipboardJS, _Emitter);\n\n\t\t/**\n\t\t * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJS(trigger, options) {\n\t\t\t_classCallCheck(this, ClipboardJS);\n\n\t\t\tvar _this = _possibleConstructorReturn(this, (ClipboardJS.__proto__ || Object.getPrototypeOf(ClipboardJS)).call(this));\n\n\t\t\t_this.resolveOptions(options);\n\t\t\t_this.listenClick(trigger);\n\t\t\treturn _this;\n\t\t}\n\n\t\t/**\n\t\t * Defines if attributes would be resolved using internal setter functions\n\t\t * or custom functions that were passed in the constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJS, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n\t\t\t\tthis.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n\t\t\t\tthis.text = typeof options.text === 'function' ? options.text : this.defaultText;\n\t\t\t\tthis.container = _typeof(options.container) === 'object' ? options.container : document.body;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'listenClick',\n\t\t\tvalue: function listenClick(trigger) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tthis.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n\t\t\t\t\treturn _this2.onClick(e);\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'onClick',\n\t\t\tvalue: function onClick(e) {\n\t\t\t\tvar trigger = e.delegateTarget || e.currentTarget;\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\n\t\t\t\tthis.clipboardAction = new _clipboardAction2.default({\n\t\t\t\t\taction: this.action(trigger),\n\t\t\t\t\ttarget: this.target(trigger),\n\t\t\t\t\ttext: this.text(trigger),\n\t\t\t\t\tcontainer: this.container,\n\t\t\t\t\ttrigger: trigger,\n\t\t\t\t\temitter: this\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultAction',\n\t\t\tvalue: function defaultAction(trigger) {\n\t\t\t\treturn getAttributeValue('action', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultTarget',\n\t\t\tvalue: function defaultTarget(trigger) {\n\t\t\t\tvar selector = getAttributeValue('target', trigger);\n\n\t\t\t\tif (selector) {\n\t\t\t\t\treturn document.querySelector(selector);\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultText',\n\t\t\tvalue: function defaultText(trigger) {\n\t\t\t\treturn getAttributeValue('text', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.listener.destroy();\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction.destroy();\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}], [{\n\t\t\tkey: 'isSupported',\n\t\t\tvalue: function isSupported() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n\t\t\t\tvar actions = typeof action === 'string' ? [action] : action;\n\t\t\t\tvar support = !!document.queryCommandSupported;\n\n\t\t\t\tactions.forEach(function (action) {\n\t\t\t\t\tsupport = support && !!document.queryCommandSupported(action);\n\t\t\t\t});\n\n\t\t\t\treturn support;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJS;\n\t}(_tinyEmitter2.default);\n\n\t/**\n\t * Helper function to retrieve attribute value.\n\t * @param {String} suffix\n\t * @param {Element} element\n\t */\n\tfunction getAttributeValue(suffix, element) {\n\t\tvar attribute = 'data-clipboard-' + suffix;\n\n\t\tif (!element.hasAttribute(attribute)) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn element.getAttribute(attribute);\n\t}\n\n\tmodule.exports = ClipboardJS;\n});\n\n},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@wpmudev/shared-ui/js/clipboard.js\n// module id = 3\n// module chunks = 0","/* global NodeList, Element, define */\n\n(function (global) {\n 'use strict';\n\n var FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n var TAB_KEY = 9;\n var ESCAPE_KEY = 27;\n var focusedBeforeDialog;\n\n /**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} node\n * @param {(NodeList | Element | string)} targets\n */\n function A11yDialog (node, targets) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n // Keep a reference of the node on the instance\n this.node = node;\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create(targets);\n }\n\n /**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\n A11yDialog.prototype.create = function (targets) {\n // Keep a collection of nodes to disable/enable when toggling the dialog\n this._targets = this._targets || collect(targets) || getSiblings(this.node);\n\n // Make sure the dialog element is disabled on load, and that the `shown`\n // property is synced with its value\n this.node.setAttribute('aria-hidden', true);\n this.shown = false;\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this.node.id + '\"]');\n this._openers.forEach(function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this));\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n this._closers = $$('[data-a11y-dialog-hide]', this.node)\n .concat($$('[data-a11y-dialog-hide=\"' + this.node.id + '\"]'));\n this._closers.forEach(function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this;\n };\n\n /**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this;\n }\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n var content = this.node.getElementsByClassName('sui-dialog-content');\n content[0].className = 'sui-dialog-content sui-bounce-in';\n overlay[0].className = 'sui-dialog-overlay sui-fade-in';\n\n this.shown = true;\n this.node.removeAttribute('aria-hidden');\n\n // Iterate over the targets to disable them by setting their `aria-hidden`\n // attribute to `true`; in case they already have this attribute, keep a\n // reference of their original value to be able to restore it later\n this._targets.forEach(function (target) {\n var original = target.getAttribute('aria-hidden');\n\n if (original) {\n target.setAttribute('data-a11y-dialog-original', original);\n }\n\n target.setAttribute('aria-hidden', 'true');\n });\n\n // Keep a reference to the currently focused element to be able to restore\n // it later, then set the focus to the first focusable child of the dialog\n // element\n focusedBeforeDialog = document.activeElement;\n setFocusToFirstItem(this.node);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this;\n };\n\n /**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this;\n }\n\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n\n var content = this.node.getElementsByClassName('sui-dialog-content');\n\n content[0].className = 'sui-dialog-content sui-bounce-out';\n\n overlay[0].className = 'sui-dialog-overlay sui-fade-out';\n\n this.shown = false;\n // This has been set so there is enough time for the animation to show\n var timeout_node = this.node;\n setTimeout(function () {\n\t\ttimeout_node.setAttribute('aria-hidden', 'true');\n\t}, 300);\n\n // Iterate over the targets to enable them by remove their `aria-hidden`\n // attribute or resetting them to their initial value\n this._targets.forEach(function (target) {\n var original = target.getAttribute('data-a11y-dialog-original');\n\n\n if (original) {\n target.setAttribute('aria-hidden', original);\n target.removeAttribute('data-a11y-dialog-original');\n } else {\n target.removeAttribute('aria-hidden');\n }\n });\n\n // If their was a focused element before the dialog was opened, restore the\n // focus back to it\n if (focusedBeforeDialog) {\n focusedBeforeDialog.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this;\n };\n\n /**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\n A11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this));\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this;\n };\n\n /**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this;\n };\n\n /**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.off = function (type, handler) {\n var index = this._listeners[type].indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this;\n };\n\n /**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any).\n *\n * @access private\n * @param {string} type\n * @param {Event} event\n */\n A11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n\n listeners.forEach(function (listener) {\n listener(this.node, event);\n }.bind(this));\n };\n\n /**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._bindKeypress = function (event) {\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog\n if (this.shown && event.which === ESCAPE_KEY) {\n event.preventDefault();\n this.hide();\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.which === TAB_KEY) {\n trapTabKey(this.node, event);\n }\n };\n\n /**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within the dialog element,\n // move it back to its first focusable child\n if (this.shown && !this.node.contains(event.target)) {\n setFocusToFirstItem(this.node);\n }\n };\n\n /**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array<Element>}\n */\n function toArray (collection) {\n return Array.prototype.slice.call(collection);\n }\n\n /**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array<Element>}\n */\n function $$ (selector, context) {\n return toArray((context || document).querySelectorAll(selector));\n }\n\n /**\n * Return an array of Element based on given argument (NodeList, Element or\n * string representing a selector)\n *\n * @param {(NodeList | Element | string)} target\n * @return {Array<Element>}\n */\n function collect (target) {\n if (NodeList.prototype.isPrototypeOf(target)) {\n return toArray(target);\n }\n\n if (Element.prototype.isPrototypeOf(target)) {\n return [target];\n }\n\n if (typeof target === 'string') {\n return $$(target);\n }\n }\n\n /**\n * Set the focus to the first focusable child of the given element\n *\n * @param {Element} node\n */\n function setFocusToFirstItem (node) {\n var focusableChildren = getFocusableChildren(node);\n\n if (focusableChildren.length) {\n focusableChildren[0].focus();\n }\n }\n\n /**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getFocusableChildren (node) {\n return $$(FOCUSABLE_ELEMENTS.join(','), node).filter(function (child) {\n return !!(child.offsetWidth || child.offsetHeight || child.getClientRects().length);\n });\n }\n\n /**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\n function trapTabKey (node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (!event.shiftKey && focusedItemIndex === focusableChildren.length - 1) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n }\n\n /**\n * Retrieve siblings from given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getSiblings (node) {\n var nodes = toArray(node.parentNode.childNodes);\n var siblings = nodes.filter(function (node) {\n return node.nodeType === 1;\n });\n\n siblings.splice(siblings.indexOf(node), 1);\n\n return siblings;\n }\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = A11yDialog;\n } else if (typeof define === 'function' && define.amd) {\n define('A11yDialog', [], function () {\n return A11yDialog;\n });\n } else if (typeof global === 'object') {\n global.A11yDialog = A11yDialog;\n }\n}(typeof global !== 'undefined' ? global : window));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@wpmudev/shared-ui/js/a11y-dialog.js\n// module id = 4\n// module chunks = 0"],"sourceRoot":""}
assets/shared-ui/README.md DELETED
@@ -1,13 +0,0 @@
1
- # README #
2
-
3
-
4
- ## Modification
5
-
6
- Files `wdev-ui.css` and `wdev-ui.js` contain the new WPMUDEV-style UI definitions and can be updated if needed.
7
-
8
- **Tip:** Those files are loaded after the notice-files below to ensure that notice definitions can be overwritten by wdev-ui files.
9
-
10
-
11
- ## Do not edit
12
-
13
- Do not modify the files `notice.css` and `notice.js` - those files are also used by a lot of other plugins. If they are changed they also need to be modified in submodule `incsub/free-dashboard` and all related plugins need to be updated.
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/shared-ui/contributors.txt DELETED
@@ -1 +0,0 @@
1
- Philipp Stracker
 
assets/shared-ui/wdev-ui.css CHANGED
@@ -45,7 +45,7 @@
45
  }
46
  .wpmud #wpbody {
47
  background: #F4F4F4;
48
- -webkit-font-smoothing: antialiased !important;
49
  }
50
  .wpmud #wpbody * {
51
  box-sizing: border-box;
@@ -69,9 +69,9 @@
69
  display: block;
70
  margin: 0.5em auto;
71
  padding: 0;
72
- line-height: 1em;
73
- text-align: center;
74
- color: #777771;
75
  }
76
  .wpmud h1,
77
  .wpmud h2,
@@ -355,8 +355,8 @@
355
  }
356
  .wpmud .box-footer {
357
  text-align: center;
358
- margin-top: 32px;
359
- font-size: 16px;
360
  }
361
 
362
  /* ****************************************************************************
@@ -994,10 +994,10 @@
994
  top: 0;
995
  padding: 0 24px;
996
  line-height: 60px;
997
- font-size: 24px;
998
- font-weight: 400;
999
- color: #BABABA;
1000
- cursor: pointer;
1001
  }
1002
  .wpmud .dev-overlay .title .close:hover {
1003
  color: #777771;
@@ -1298,12 +1298,12 @@
1298
  .wpmud .notice-dismiss:hover,
1299
  .wpmud .notice-dismiss:focus,
1300
  .wpmud .notice-dismiss:active {
1301
- border: none;
1302
- margin: 0;
1303
- padding: 9px;
1304
- background: none;
1305
- color: #b4b9be;
1306
- cursor: pointer;
1307
  }
1308
 
1309
  /* ****************************************************************************
@@ -1669,12 +1669,12 @@
1669
  }
1670
  .wpmud .select-list-container .list-results {
1671
  position: absolute;
1672
- top: 41px;
1673
- left: -9999px;
1674
- right: -9999px;
1675
- z-index: 1010;
1676
- width: 0;
1677
- border-top: 0;
1678
  background: #FFF;
1679
  border: 1px solid #ddd;
1680
  margin-left: -1px;
@@ -1810,14 +1810,14 @@
1810
  opacity: 0.8;
1811
 
1812
  font-family: 'WPMU-DEV-App-Icons';
1813
- speak: none;
1814
- font-style: normal;
1815
- font-weight: normal;
1816
- font-variant: normal;
1817
- text-transform: none;
1818
- line-height: 1;
1819
- -webkit-font-smoothing: antialiased;
1820
- -moz-osx-font-smoothing: grayscale;
1821
  }
1822
  .wpmud .listing li.circle:before {
1823
  content: "\68";
@@ -2186,48 +2186,48 @@
2186
  vertical-align: middle;
2187
  height: 30px;
2188
  line-height: 24px;
2189
- color: #b6b6b6;
2190
- cursor: default;
2191
- font-weight: normal;
2192
  }
2193
  .wpmud .count.reply:before {
2194
- content: '';
2195
- position: absolute;
2196
- bottom: -8px;
2197
- right: 4px;
2198
- border-width: 8px 0px 0px 12px;
2199
- border-style: solid;
2200
- border-color: #DDDDDD transparent;
2201
- display: block;
2202
- width: 0;
2203
  }
2204
  .wpmud .count.reply:after {
2205
- content: '';
2206
- position: absolute;
2207
- bottom: -4px;
2208
- right: 6px;
2209
- border-width: 4px 0px 0px 6px;
2210
- border-style: solid;
2211
- border-color: #fff transparent;
2212
- display: block;
2213
- width: 0;
2214
  }
2215
  .wpmud .count.reply.mirror:before {
2216
- left: 4px;
2217
- border-width: 8px 12px 0px 0px;
2218
  }
2219
  .wpmud .count.reply.mirror:after {
2220
- left: 6px;
2221
- border-width: 4px 6px 0px 0px;
2222
  }
2223
  .wpmud .count.notification {
2224
- background: #fecf2f;
2225
- border-color: #fecf2f;
2226
- color: #fff;
2227
  }
2228
  .wpmud .count.notification:before,
2229
  .wpmud .count.notification:after {
2230
- border-color: #fecf2f transparent;
2231
  }
2232
 
2233
  /* ****************************************************************************
@@ -2293,15 +2293,15 @@
2293
  * 23. FONTAWESOME
2294
  */
2295
  @font-face {
2296
- font-family: 'FontAwesomeWdv';
2297
- src: url('font/fontawesome-webfont.eot');
2298
- src: url('font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),
2299
- url('font/fontawesome-webfont.woff') format('woff'),
2300
- url('font/fontawesome-webfont.ttf') format('truetype'),
2301
- url('font/fontawesome-webfont.svgz#FontAwesomeRegular') format('svg'),
2302
- url('font/fontawesome-webfont.svg#FontAwesomeRegular') format('svg');
2303
- font-weight: normal;
2304
- font-style: normal;
2305
  }
2306
  .wdv-icon:before{font-family:FontAwesomeWdv;font-weight:normal;font-style:normal;display:inline-block;text-decoration:inherit}a .wdv-icon{display:inline-block;text-decoration:inherit}.wdv-icon-large:before{vertical-align:top;font-size:1.3333333333333333em}.btn .wdv-icon{line-height:.9em}li .wdv-icon, .action_links .wdv-icon, .wdv-icon.wdv-icon-fw{display:inline-block;width:1.25em;text-align:center}li .wdv-icon-large.wdv-icon,li .wdv-icon-large.wdv-icon{width:1.875em}li.wdv-icon{margin-left:0;list-style-type:none}li.wdv-icon:before{text-indent:-2em;text-align:center}li.wdv-icon.wdv-icon-large:before{text-indent:-1.3333333333333333em}.wdv-icon-glass:before{content:"\f000"}.wdv-icon-music:before{content:"\f001"}.wdv-icon-search:before{content:"\f002"}.wdv-icon-envelope:before{content:"\f003"}.wdv-icon-heart:before{content:"\f004"}.wdv-icon-star:before{content:"\f005"}.wdv-icon-star-empty:before{content:"\f006"}.wdv-icon-user:before{content:"\f007"}.wdv-icon-film:before{content:"\f008"}.wdv-icon-th-large:before{content:"\f009"}.wdv-icon-th:before{content:"\f00a"}.wdv-icon-th-list:before{content:"\f00b"}.wdv-icon-ok:before{content:"\f00c"}.wdv-icon-remove:before{content:"\f00d"}.wdv-icon-zoom-in:before{content:"\f00e"}.wdv-icon-zoom-out:before{content:"\f010"}.wdv-icon-off:before{content:"\f011"}.wdv-icon-signal:before{content:"\f012"}.wdv-icon-cog:before{content:"\f013"}.wdv-icon-trash:before{content:"\f014"}.wdv-icon-home:before{content:"\f015"}.wdv-icon-file:before{content:"\f016"}.wdv-icon-time:before{content:"\f017"}.wdv-icon-road:before{content:"\f018"}.wdv-icon-download-alt:before{content:"\f019"}.wdv-icon-download:before{content:"\f01a"}.wdv-icon-upload:before{content:"\f01b"}.wdv-icon-inbox:before{content:"\f01c"}.wdv-icon-play-circle:before{content:"\f01d"}.wdv-icon-repeat:before{content:"\f01e"}.wdv-icon-refresh:before{content:"\f021"}.wdv-icon-list-alt:before{content:"\f022"}.wdv-icon-lock:before{content:"\f023"}.wdv-icon-flag:before{content:"\f024"}.wdv-icon-headphones:before{content:"\f025"}.wdv-icon-volume-off:before{content:"\f026"}.wdv-icon-volume-down:before{content:"\f027"}.wdv-icon-volume-up:before{content:"\f028"}.wdv-icon-qrcode:before{content:"\f029"}.wdv-icon-barcode:before{content:"\f02a"}.wdv-icon-tag:before{content:"\f02b"}.wdv-icon-tags:before{content:"\f02c"}.wdv-icon-book:before{content:"\f02d"}.wdv-icon-bookmark:before{content:"\f02e"}.wdv-icon-print:before{content:"\f02f"}.wdv-icon-camera:before{content:"\f030"}.wdv-icon-font:before{content:"\f031"}.wdv-icon-bold:before{content:"\f032"}.wdv-icon-italic:before{content:"\f033"}.wdv-icon-text-height:before{content:"\f034"}.wdv-icon-text-width:before{content:"\f035"}.wdv-icon-align-left:before{content:"\f036"}.wdv-icon-align-center:before{content:"\f037"}.wdv-icon-align-right:before{content:"\f038"}.wdv-icon-align-justify:before{content:"\f039"}.wdv-icon-list:before{content:"\f03a"}.wdv-icon-indent-left:before{content:"\f03b"}.wdv-icon-indent-right:before{content:"\f03c"}.wdv-icon-facetime-video:before{content:"\f03d"}.wdv-icon-picture:before{content:"\f03e"}.wdv-icon-pencil:before{content:"\f040"}.wdv-icon-map-marker:before{content:"\f041"}.wdv-icon-adjust:before{content:"\f042"}.wdv-icon-tint:before{content:"\f043"}.wdv-icon-edit:before{content:"\f044"}.wdv-icon-share:before{content:"\f045"}.wdv-icon-check:before{content:"\f046"}.wdv-icon-move:before{content:"\f047"}.wdv-icon-step-backward:before{content:"\f048"}.wdv-icon-fast-backward:before{content:"\f049"}.wdv-icon-backward:before{content:"\f04a"}.wdv-icon-play:before{content:"\f04b"}.wdv-icon-pause:before{content:"\f04c"}.wdv-icon-stop:before{content:"\f04d"}.wdv-icon-forward:before{content:"\f04e"}.wdv-icon-fast-forward:before{content:"\f050"}.wdv-icon-step-forward:before{content:"\f051"}.wdv-icon-eject:before{content:"\f052"}.wdv-icon-chevron-left:before{content:"\f053"}.wdv-icon-chevron-right:before{content:"\f054"}.wdv-icon-plus-sign:before{content:"\f055"}.wdv-icon-minus-sign:before{content:"\f056"}.wdv-icon-remove-sign:before{content:"\f057"}.wdv-icon-ok-sign:before{content:"\f058"}.wdv-icon-question-sign:before{content:"\f059"}.wdv-icon-info-sign:before{content:"\f05a"}.wdv-icon-screenshot:before{content:"\f05b"}.wdv-icon-remove-circle:before{content:"\f05c"}.wdv-icon-ok-circle:before{content:"\f05d"}.wdv-icon-ban-circle:before{content:"\f05e"}.wdv-icon-arrow-left:before{content:"\f060"}.wdv-icon-arrow-right:before{content:"\f061"}.wdv-icon-arrow-up:before{content:"\f062"}.wdv-icon-arrow-down:before{content:"\f063"}.wdv-icon-share-alt:before{content:"\f064"}.wdv-icon-resize-full:before{content:"\f065"}.wdv-icon-resize-small:before{content:"\f066"}.wdv-icon-plus:before{content:"\f067"}.wdv-icon-minus:before{content:"\f068"}.wdv-icon-asterisk:before{content:"\f069"}.wdv-icon-exclamation-sign:before{content:"\f06a"}.wdv-icon-gift:before{content:"\f06b"}.wdv-icon-leaf:before{content:"\f06c"}.wdv-icon-fire:before{content:"\f06d"}.wdv-icon-eye-open:before{content:"\f06e"}.wdv-icon-eye-close:before{content:"\f070"}.wdv-icon-warning-sign:before{content:"\f071"}.wdv-icon-plane:before{content:"\f072"}.wdv-icon-calendar:before{content:"\f073"}.wdv-icon-random:before{content:"\f074"}.wdv-icon-comment:before{content:"\f075"}.wdv-icon-magnet:before{content:"\f076"}.wdv-icon-chevron-up:before{content:"\f077"}.wdv-icon-chevron-down:before{content:"\f078"}.wdv-icon-retweet:before{content:"\f079"}.wdv-icon-shopping-cart:before{content:"\f07a"}.wdv-icon-folder-close:before{content:"\f07b"}.wdv-icon-folder-open:before{content:"\f07c"}.wdv-icon-resize-vertical:before{content:"\f07d"}.wdv-icon-resize-horizontal:before{content:"\f07e"}.wdv-icon-bar-chart:before{content:"\f080"}.wdv-icon-twitter-sign:before{content:"\f081"}.wdv-icon-facebook-sign:before{content:"\f082"}.wdv-icon-camera-retro:before{content:"\f083"}.wdv-icon-key:before{content:"\f084"}.wdv-icon-cogs:before{content:"\f085"}.wdv-icon-comments:before{content:"\f086"}.wdv-icon-thumbs-up:before{content:"\f087"}.wdv-icon-thumbs-down:before{content:"\f088"}.wdv-icon-star-half:before{content:"\f089"}.wdv-icon-heart-empty:before{content:"\f08a"}.wdv-icon-signout:before{content:"\f08b"}.wdv-icon-linkedin-sign:before{content:"\f08c"}.wdv-icon-pushpin:before{content:"\f08d"}.wdv-icon-external-link:before{content:"\f08e"}.wdv-icon-signin:before{content:"\f090"}.wdv-icon-trophy:before{content:"\f091"}.wdv-icon-github-sign:before{content:"\f092"}.wdv-icon-upload-alt:before{content:"\f093"}.wdv-icon-lemon:before{content:"\f094"}.wdv-icon-phone:before{content:"\f095"}.wdv-icon-check-empty:before{content:"\f096"}.wdv-icon-bookmark-empty:before{content:"\f097"}.wdv-icon-phone-sign:before{content:"\f098"}.wdv-icon-twitter:before{content:"\f099"}.wdv-icon-facebook:before{content:"\f09a"}.wdv-icon-github:before{content:"\f09b"}.wdv-icon-unlock:before{content:"\f09c"}.wdv-icon-credit-card:before{content:"\f09d"}.wdv-icon-rss:before{content:"\f09e"}.wdv-icon-hdd:before{content:"\f0a0"}.wdv-icon-bullhorn:before{content:"\f0a1"}.wdv-icon-bell:before{content:"\f0a2"}.wdv-icon-certificate:before{content:"\f0a3"}.wdv-icon-hand-right:before{content:"\f0a4"}.wdv-icon-hand-left:before{content:"\f0a5"}.wdv-icon-hand-up:before{content:"\f0a6"}.wdv-icon-hand-down:before{content:"\f0a7"}.wdv-icon-circle-arrow-left:before{content:"\f0a8"}.wdv-icon-circle-arrow-right:before{content:"\f0a9"}.wdv-icon-circle-arrow-up:before{content:"\f0aa"}.wdv-icon-circle-arrow-down:before{content:"\f0ab"}.wdv-icon-globe:before{content:"\f0ac"}.wdv-icon-wrench:before{content:"\f0ad"}.wdv-icon-tasks:before{content:"\f0ae"}.wdv-icon-filter:before{content:"\f0b0"}.wdv-icon-briefcase:before{content:"\f0b1"}.wdv-icon-fullscreen:before{content:"\f0b2"}.wdv-icon-group:before{content:"\f0c0"}.wdv-icon-link:before{content:"\f0c1"}.wdv-icon-cloud:before{content:"\f0c2"}.wdv-icon-beaker:before{content:"\f0c3"}.wdv-icon-cut:before{content:"\f0c4"}.wdv-icon-copy:before{content:"\f0c5"}.wdv-icon-paper-clip:before{content:"\f0c6"}.wdv-icon-save:before{content:"\f0c7"}.wdv-icon-sign-blank:before{content:"\f0c8"}.wdv-icon-reorder:before{content:"\f0c9"}.wdv-icon-list-ul:before{content:"\f0ca"}.wdv-icon-list-ol:before{content:"\f0cb"}.wdv-icon-strikethrough:before{content:"\f0cc"}.wdv-icon-underline:before{content:"\f0cd"}.wdv-icon-table:before{content:"\f0ce"}.wdv-icon-magic:before{content:"\f0d0"}.wdv-icon-truck:before{content:"\f0d1"}.wdv-icon-pinterest:before{content:"\f0d2"}.wdv-icon-pinterest-sign:before{content:"\f0d3"}.wdv-icon-google-plus-sign:before{content:"\f0d4"}.wdv-icon-google-plus:before{content:"\f0d5"}.wdv-icon-money:before{content:"\f0d6"}.wdv-icon-caret-down:before{content:"\f0d7"}.wdv-icon-caret-up:before{content:"\f0d8"}.wdv-icon-caret-left:before{content:"\f0d9"}.wdv-icon-caret-right:before{content:"\f0da"}.wdv-icon-columns:before{content:"\f0db"}.wdv-icon-sort:before{content:"\f0dc"}.wdv-icon-sort-down:before{content:"\f0dd"}.wdv-icon-sort-up:before{content:"\f0de"}.wdv-icon-envelope-alt:before{content:"\f0e0"}.wdv-icon-linkedin:before{content:"\f0e1"}.wdv-icon-undo:before{content:"\f0e2"}.wdv-icon-legal:before{content:"\f0e3"}.wdv-icon-dashboard:before{content:"\f0e4"}.wdv-icon-comment-alt:before{content:"\f0e5"}.wdv-icon-comments-alt:before{content:"\f0e6"}.wdv-icon-bolt:before{content:"\f0e7"}.wdv-icon-sitemap:before{content:"\f0e8"}.wdv-icon-umbrella:before{content:"\f0e9"}.wdv-icon-paste:before{content:"\f0ea"}.wdv-icon-user-md:before{content:"\f200"}
2307
 
@@ -2345,869 +2345,188 @@
2345
  -webkit-font-smoothing: antialiased;
2346
  -moz-osx-font-smoothing: grayscale;
2347
  }
2348
- .icon-fi-blog:before {
2349
- content: "\e90d";
2350
- color: #888;
2351
- }
2352
- .icon-fi-jobs-pros-search:before {
2353
- content: "\e90e";
2354
- color: #888;
2355
- }
2356
- .icon-fi-security-thumb-print:before {
2357
- content: "\e90f";
2358
- color: #888;
2359
- }
2360
- .icon-fi-IP:before {
2361
- content: "\e910";
2362
- color: #888;
2363
- }
2364
- .icon-fi-timed-countdown:before {
2365
- content: "\e911";
2366
- color: #888;
2367
- }
2368
- .icon-fi-2factor-authentication-security:before {
2369
- content: "\e912";
2370
- color: #888;
2371
- }
2372
- .icon-fi-buddypress:before {
2373
- content: "\e90c";
2374
- color: #888;
2375
- }
2376
- .icon-fi-plug-disconnected:before {
2377
- content: "\e90a";
2378
- color: #888;
2379
- }
2380
- .icon-fi-plug-connected:before {
2381
- content: "\e90b";
2382
- color: #888;
2383
- }
2384
- .icon-fi-open-new-window:before {
2385
- content: "\e909";
2386
- color: #888;
2387
- }
2388
- .icon-fi-icon-shipper-anchor:before {
2389
- content: "\e906";
2390
- color: #888;
2391
- }
2392
- .icon-fi-icon-forminator2:before {
2393
- content: "\e907";
2394
- color: #888;
2395
- }
2396
- .icon-fi-icon-forminator1:before {
2397
- content: "\e908";
2398
- color: #888;
2399
- }
2400
- .icon-fi-cloud-migration:before {
2401
- content: "\e905";
2402
- color: #888;
2403
- }
2404
- .icon-fi-icon-performance:before {
2405
- content: "\e903";
2406
- color: #888;
2407
- }
2408
- .icon-fi-power-on-off:before {
2409
- content: "\e904";
2410
- color: #888;
2411
- }
2412
- .icon-fi-update-arrow:before {
2413
- content: "\e902";
2414
- color: #888;
2415
- }
2416
- .icon-fi-dashboard-settings:before {
2417
- content: "\e901";
2418
- color: #888;
2419
- }
2420
- .icon-fi-icon-wpmu-logo-line:before {
2421
- content: "\203a";
2422
- color: #888;
2423
- }
2424
- .icon-fi-icon-wpmu-logo-solid:before {
2425
- content: "\2039";
2426
- color: #888;
2427
- }
2428
- .icon-fi-star-line:before {
2429
- content: "\cf";
2430
- color: #888;
2431
- }
2432
- .icon-fi-notification-count:before {
2433
- content: "\e900";
2434
- color: #888;
2435
- }
2436
- .icon-fi-24-hour-support:before {
2437
- content: "\c1";
2438
- color: #888;
2439
- }
2440
- .icon-fi-speed-optimize:before {
2441
- content: "\f8";
2442
- color: #888;
2443
- }
2444
- .icon-fi-cloudflare:before {
2445
- content: "\d0";
2446
- color: #888;
2447
- }
2448
- .icon-fi-alert:before {
2449
- content: "\58";
2450
- color: #888;
2451
- }
2452
- .icon-fi-align-center:before {
2453
- content: "\5e";
2454
- color: #888;
2455
- }
2456
- .icon-fi-align-justify:before {
2457
- content: "\23";
2458
- color: #888;
2459
- }
2460
- .icon-fi-align-left:before {
2461
- content: "\25";
2462
- color: #888;
2463
- }
2464
- .icon-fi-align-right:before {
2465
- content: "\26";
2466
- color: #888;
2467
- }
2468
- .icon-fi-annotate:before {
2469
- content: "\b4";
2470
- color: #888;
2471
- }
2472
- .icon-fi-arrow-up:before {
2473
- content: "\d4";
2474
- color: #888;
2475
- }
2476
- .icon-fi-arrow-right:before {
2477
- content: "\af";
2478
- color: #888;
2479
- }
2480
- .icon-fi-arrow-down:before {
2481
- content: "\c2";
2482
- color: #888;
2483
- }
2484
- .icon-fi-arrow-left:before {
2485
- content: "\f8ff";
2486
- color: #888;
2487
- }
2488
- .icon-fi-more:before {
2489
- content: "\2026";
2490
- color: #888;
2491
  }
2492
- .icon-fi-minus:before {
2493
- content: "\2d";
2494
- color: #888;
2495
  }
2496
- .icon-fi-plus:before {
2497
  content: "\3d";
2498
- color: #888;
2499
- }
2500
- .icon-fi-arrow-up-carats:before {
2501
- content: "\2dd";
2502
- color: #888;
2503
- }
2504
- .icon-fi-arrow-down-carats:before {
2505
- content: "\131";
2506
- color: #888;
2507
  }
2508
- .icon-fi-arrow-left-carats:before {
2509
- content: "\d3";
2510
- color: #888;
2511
- }
2512
- .icon-fi-arrow-right-carats:before {
2513
- content: "\2dc";
2514
- color: #888;
2515
- }
2516
- .icon-fi-arrows-compress:before {
2517
- content: "\2265";
2518
- color: #888;
2519
- }
2520
- .icon-fi-arrows-expand:before {
2521
- content: "\ac";
2522
- color: #888;
2523
- }
2524
- .icon-fi-arrows-in:before {
2525
- content: "\2264";
2526
- color: #888;
2527
- }
2528
- .icon-fi-arrows-out:before {
2529
- content: "\2da";
2530
- color: #888;
2531
- }
2532
- .icon-fi-check:before {
2533
- content: "\28";
2534
- color: #888;
2535
- }
2536
- .icon-fi-close:before {
2537
- content: "\29";
2538
- color: #888;
2539
- }
2540
- .icon-fi-at-sign:before {
2541
- content: "\40";
2542
- color: #888;
2543
- }
2544
- .icon-fi-calendar:before {
2545
- content: "\220f";
2546
- color: #888;
2547
- }
2548
- .icon-fi-camera:before {
2549
- content: "\d8";
2550
- color: #888;
2551
- }
2552
- .icon-fi-clipboard-notes:before {
2553
- content: "\bf";
2554
- color: #888;
2555
- }
2556
- .icon-fi-clock:before {
2557
- content: "\2c";
2558
- color: #888;
2559
- }
2560
- .icon-fi-cloud:before {
2561
- content: "\2122";
2562
- color: #888;
2563
- }
2564
- .icon-fi-download-cloud:before {
2565
- content: "\a3";
2566
- color: #888;
2567
- }
2568
- .icon-fi-upload-cloud:before {
2569
- content: "\a2";
2570
- color: #888;
2571
- }
2572
- .icon-fi-comment:before {
2573
- content: "\a7";
2574
- color: #888;
2575
- }
2576
- .icon-fi-comments:before {
2577
- content: "\b6";
2578
- color: #888;
2579
- }
2580
- .icon-fi-comment-3:before {
2581
- content: "\aa";
2582
- color: #888;
2583
- }
2584
- .icon-fi-compass:before {
2585
- content: "\2c6";
2586
- color: #888;
2587
- }
2588
- .icon-fi-credit-card:before {
2589
- content: "\63";
2590
- color: #888;
2591
- }
2592
- .icon-fi-crop:before {
2593
- content: "\43";
2594
- color: #888;
2595
- }
2596
- .icon-fi-crown:before {
2597
- content: "\a1";
2598
- color: #888;
2599
- }
2600
- .icon-fi-italic:before {
2601
- content: "\7b";
2602
- color: #888;
2603
- }
2604
- .icon-fi-bold:before {
2605
  content: "\42";
2606
- color: #888;
2607
- }
2608
- .icon-fi-underline:before {
2609
- content: "\55";
2610
- color: #888;
2611
- }
2612
- .icon-fi-text-color:before {
2613
- content: "\a8";
2614
- color: #888;
2615
- }
2616
- .icon-fi-style-type:before {
2617
- content: "\3c";
2618
- color: #888;
2619
- }
2620
- .icon-fi-quote-2:before {
2621
- content: "\27";
2622
- color: #888;
2623
- }
2624
- .icon-fi-quote:before {
2625
- content: "\3b";
2626
- color: #888;
2627
- }
2628
- .icon-fi-paperclip:before {
2629
- content: "\41";
2630
- color: #888;
2631
- }
2632
- .icon-fi-indent-less:before {
2633
- content: "\201d";
2634
- color: #888;
2635
  }
2636
- .icon-fi-indent-more:before {
2637
- content: "\2019";
2638
- color: #888;
2639
- }
2640
- .icon-fi-list-bullet:before {
2641
- content: "\38";
2642
- color: #888;
2643
- }
2644
- .icon-fi-list-number:before {
2645
- content: "\37";
2646
- color: #888;
2647
- }
2648
- .icon-fi-list:before {
2649
- content: "\60";
2650
- color: #888;
2651
- }
2652
- .icon-fi-link:before {
2653
- content: "\35";
2654
- color: #888;
2655
- }
2656
- .icon-fi-unlink:before {
2657
- content: "\36";
2658
- color: #888;
2659
- }
2660
- .icon-fi-color-pick-eyedropper:before {
2661
- content: "\a5";
2662
- color: #888;
2663
- }
2664
- .icon-fi-wand-magic:before {
2665
- content: "\5a";
2666
- color: #888;
2667
- }
2668
- .icon-fi-layers:before {
2669
- content: "\e6";
2670
- color: #888;
2671
- }
2672
- .icon-fi-dislike:before {
2673
- content: "\6b";
2674
- color: #888;
2675
- }
2676
- .icon-fi-like:before {
2677
- content: "\6a";
2678
- color: #888;
2679
- }
2680
- .icon-fi-dollar:before {
2681
- content: "\24";
2682
- color: #888;
2683
- }
2684
- .icon-fi-download:before {
2685
- content: "\e93b";
2686
- color: #888;
2687
- }
2688
- .icon-fi-eye:before {
2689
- content: "\65";
2690
- color: #888;
2691
- }
2692
- .icon-fi-eye-hide:before {
2693
- content: "\71";
2694
- color: #888;
2695
- }
2696
- .icon-fi-arrow-return-back:before {
2697
- content: "\52";
2698
- color: #888;
2699
- }
2700
- .icon-fi-first-aid:before {
2701
- content: "\e93f";
2702
- color: #888;
2703
- }
2704
- .icon-fi-folder:before {
2705
- content: "\2d8";
2706
- color: #888;
2707
- }
2708
- .icon-fi-map:before {
2709
- content: "\34";
2710
- color: #888;
2711
- }
2712
- .icon-fi-graph-bar:before {
2713
- content: "\c7";
2714
- color: #888;
2715
- }
2716
- .icon-fi-graph-bar_1:before {
2717
- content: "\2db";
2718
- color: #888;
2719
- }
2720
- .icon-fi-heart:before {
2721
- content: "\4b";
2722
- color: #888;
2723
- }
2724
- .icon-fi-home:before {
2725
- content: "\4a";
2726
- color: #888;
2727
- }
2728
- .icon-fi-info:before {
2729
- content: "\49";
2730
- color: #888;
2731
- }
2732
- .icon-fi-key:before {
2733
- content: "\25ca";
2734
- color: #888;
2735
  }
2736
- .icon-fi-laptop:before {
2737
- content: "\ab";
2738
- color: #888;
2739
  }
2740
- .icon-fi-lightbulb:before {
2741
- content: "\4c";
2742
- color: #888;
2743
  }
2744
- .icon-fi-asterisk:before {
2745
- content: "\2a";
2746
- color: #888;
2747
  }
2748
- .icon-fi-lock:before {
2749
  content: "\39";
2750
- color: #888;
2751
  }
2752
- .icon-fi-unlock:before {
2753
  content: "\30";
2754
- color: #888;
2755
- }
2756
- .icon-fi-mail:before {
2757
- content: "\6d";
2758
- color: #888;
2759
- }
2760
- .icon-fi-location-marker:before {
2761
- content: "\6c";
2762
- color: #888;
2763
- }
2764
- .icon-fi-microphone-audio:before {
2765
- content: "\2030";
2766
- color: #888;
2767
  }
2768
- .icon-fi-mobile-signal:before {
2769
- content: "\201b";
2770
- color: #888;
2771
- }
2772
- .icon-fi-mobile:before {
2773
- content: "\201c";
2774
- color: #888;
2775
- }
2776
- .icon-fi-monitor:before {
2777
- content: "\5c";
2778
- color: #888;
2779
- }
2780
- .icon-fi-magnifying-glass-search:before {
2781
- content: "\ba";
2782
- color: #888;
2783
- }
2784
- .icon-fi-zoom-in:before {
2785
- content: "\2260";
2786
- color: #888;
2787
  }
2788
- .icon-fi-zoom-out:before {
2789
- content: "\2013";
2790
- color: #888;
2791
  }
2792
- .icon-fi-magnifying-search-glass-love:before {
2793
- content: "\2022";
2794
- color: #888;
2795
  }
2796
- .icon-fi-price-tag:before {
2797
- content: "\2c7";
2798
- color: #888;
2799
  }
2800
- .icon-fi-bookmark:before {
2801
- content: "\221a";
2802
- color: #888;
2803
  }
2804
- .icon-fi-book-bookmark:before {
2805
- content: "\2d9";
2806
- color: #888;
2807
  }
2808
- .icon-fi-book:before {
2809
- content: "\2206";
2810
- color: #888;
2811
  }
2812
- .icon-fi-page-multiple:before {
2813
- content: "\e7";
2814
- color: #888;
2815
  }
2816
- .icon-fi-page-pdf:before {
2817
- content: "\c6";
2818
- color: #888;
2819
  }
2820
- .icon-fi-page-search:before {
2821
- content: "\da";
2822
- color: #888;
2823
  }
2824
- .icon-fi-page:before {
2825
- content: "\d2";
2826
- color: #888;
2827
  }
2828
- .icon-fi-paint-bucket:before {
2829
- content: "\222b";
2830
- color: #888;
2831
  }
2832
- .icon-fi-paypal:before {
2833
  content: "\59";
2834
- color: #888;
2835
  }
2836
- .icon-fi-pencil:before {
2837
- content: "\2f";
2838
- color: #888;
2839
- }
2840
- .icon-fi-photo-picture:before {
2841
- content: "\44";
2842
- color: #888;
2843
- }
2844
- .icon-fi-play:before {
2845
- content: "\70";
2846
- color: #888;
2847
- }
2848
- .icon-fi-pause:before {
2849
- content: "\6f";
2850
- color: #888;
2851
  }
2852
- .icon-fi-fast-forward:before {
2853
- content: "\3e";
2854
- color: #888;
2855
  }
2856
- .icon-fi-refresh:before {
2857
- content: "\45";
2858
- color: #888;
2859
  }
2860
- .icon-fi-update:before {
2861
- content: "\ae";
2862
- color: #888;
2863
  }
2864
- .icon-fi-puzzle:before {
2865
- content: "\7d";
2866
- color: #888;
2867
  }
2868
- .icon-fi-layout-grid:before {
2869
- content: "\221e";
2870
- color: #888;
2871
  }
2872
- .icon-fi-sheild-badge:before {
2873
- content: "\e96a";
2874
- color: #888;
2875
  }
2876
- .icon-fi-coffee-cup:before {
2877
- content: "\e96b";
2878
- color: #888;
2879
  }
2880
- .icon-fi-skull:before {
2881
- content: "\e96c";
2882
- color: #888;
2883
  }
2884
- .icon-fi-social-android:before {
2885
- content: "\2e";
2886
- color: #888;
2887
  }
2888
- .icon-fi-social-apple:before {
2889
- content: "\61";
2890
- color: #888;
2891
  }
2892
- .icon-fi-social-drive:before {
2893
- content: "\76";
2894
- color: #888;
2895
  }
2896
- .icon-fi-social-dropbox:before {
2897
- content: "\64";
2898
- color: #888;
2899
  }
2900
- .icon-fi-social-facebook:before {
2901
  content: "\66";
2902
- color: #888;
2903
  }
2904
- .icon-fi-social-github:before {
2905
  content: "\68";
2906
- color: #888;
2907
  }
2908
- .icon-fi-social-google-plus:before {
2909
- content: "\67";
2910
- color: #888;
2911
- }
2912
- .icon-fi-social-linkedin:before {
2913
- content: "\69";
2914
- color: #888;
2915
- }
2916
- .icon-fi-social-twitter:before {
2917
- content: "\74";
2918
- color: #888;
2919
  }
2920
- .icon-fi-animation-video:before {
2921
- content: "\46";
2922
- color: #888;
2923
  }
2924
- .icon-fi-social-youtube:before {
2925
  content: "\79";
2926
- color: #888;
2927
- }
2928
- .icon-fi-white-label-video:before {
2929
- content: "\75";
2930
- color: #888;
2931
- }
2932
- .icon-fi-star:before {
2933
- content: "\53";
2934
- color: #888;
2935
- }
2936
- .icon-fi-tablet-landscape:before {
2937
- content: "\5b";
2938
- color: #888;
2939
- }
2940
- .icon-fi-tablet-portrait:before {
2941
- content: "\5d";
2942
- color: #888;
2943
  }
2944
- .icon-fi-thumbnails:before {
2945
- content: "\47";
2946
- color: #888;
2947
- }
2948
- .icon-fi-ticket:before {
2949
- content: "\e97d";
2950
- color: #888;
2951
- }
2952
- .icon-fi-profile-male:before {
2953
- content: "\b5";
2954
- color: #888;
2955
- }
2956
- .icon-fi-profile-female:before {
2957
- content: "\192";
2958
- color: #888;
2959
- }
2960
- .icon-fi-community-people:before {
2961
- content: "\2018";
2962
- color: #888;
2963
  }
2964
- .icon-fi-trash:before {
2965
- content: "\51";
2966
- color: #888;
2967
  }
2968
- .icon-fi-notification:before {
2969
- content: "\6e";
2970
- color: #888;
2971
  }
2972
- .icon-fi-user-hero-points-trophy:before {
2973
  content: "\31";
2974
- color: #888;
2975
- }
2976
- .icon-fi-megaphone:before {
2977
- content: "\c5";
2978
- color: #888;
2979
- }
2980
- .icon-fi-flag:before {
2981
- content: "\7c";
2982
- color: #888;
2983
  }
2984
- .icon-fi-stopwatch:before {
2985
- content: "\e986";
2986
- color: #888;
2987
- }
2988
- .icon-fi-shopping-cart:before {
2989
- content: "\cd";
2990
- color: #888;
2991
- }
2992
- .icon-fi-share:before {
2993
- content: "\73";
2994
- color: #888;
2995
  }
2996
- .icon-fi-help-support:before {
2997
  content: "\48";
2998
- color: #888;
2999
  }
3000
- .icon-fi-web-globe-world:before {
3001
- content: "\57";
3002
- color: #888;
3003
- }
3004
- .icon-fi-widget-settings-config:before {
3005
- content: "\78";
3006
- color: #888;
3007
- }
3008
- .icon-fi-wrench-tool:before {
3009
- content: "\2044";
3010
- color: #888;
3011
- }
3012
- .icon-fi-settings-slider-control:before {
3013
- content: "\153";
3014
- color: #888;
3015
- }
3016
- .icon-fi-filter:before {
3017
- content: "\7a";
3018
- color: #888;
3019
- }
3020
- .icon-fi-reply:before {
3021
- content: "\72";
3022
- color: #888;
3023
- }
3024
- .icon-fi-finger-point:before {
3025
- content: "\2248";
3026
- color: #888;
3027
- }
3028
- .icon-fi-finger-swipe:before {
3029
- content: "\2203";
3030
- color: #888;
3031
- }
3032
- .icon-fi-mouse-scroll:before {
3033
- content: "\df";
3034
- color: #888;
3035
- }
3036
- .icon-fi-plugin-2:before {
3037
- content: "\4f";
3038
- color: #888;
3039
- }
3040
- .icon-fi-brush:before {
3041
- content: "\7e";
3042
- color: #888;
3043
  }
3044
- .icon-fi-themes:before {
3045
- content: "\54";
3046
- color: #888;
3047
  }
3048
- .icon-fi-plugins:before {
3049
  content: "\50";
3050
- color: #888;
3051
  }
3052
- .icon-fi-question:before {
3053
- content: "\3f";
3054
- color: #888;
3055
- }
3056
- .icon-fi-warning-alert:before {
3057
- content: "\21";
3058
- color: #888;
3059
  }
3060
- .icon-fi-check-tick:before {
3061
- content: "\5f";
3062
- color: #888;
3063
  }
3064
- .icon-fi-cross-close:before {
3065
- content: "\2b";
3066
- color: #888;
3067
  }
3068
- .icon-fi-user-reputation-points:before {
3069
  content: "\32";
3070
- color: #888;
3071
- }
3072
- .icon-fi-user-star-level-up:before {
3073
- content: "\33";
3074
- color: #888;
3075
- }
3076
- .icon-fi-icon-devman:before {
3077
- content: "\20ac";
3078
- color: #888;
3079
- }
3080
- .icon-fi-icon-defender:before {
3081
- content: "\b7";
3082
- color: #888;
3083
  }
3084
- .icon-fi-icon-hub:before {
3085
- content: "\fb02";
3086
- color: #888;
3087
- }
3088
- .icon-fi-icon-hummingbird:before {
3089
- content: "\b0";
3090
- color: #888;
3091
- }
3092
- .icon-fi-icon-hustle:before {
3093
- content: "\2014";
3094
- color: #888;
3095
- }
3096
- .icon-fi-icon-smart-crawl:before {
3097
- content: "\2202";
3098
- color: #888;
3099
- }
3100
- .icon-fi-icon-smush:before {
3101
- content: "\2021";
3102
- color: #888;
3103
- }
3104
- .icon-fi-icon-snapshot:before {
3105
- content: "\fb01";
3106
- color: #888;
3107
  }
3108
- .icon-fi-icon-upfront:before {
3109
- content: "\201a";
3110
- color: #888;
3111
  }
3112
- .icon-fi-icon-uptime:before {
3113
- content: "\b1";
3114
- color: #888;
3115
  }
3116
- .icon-fi-icon-pulse:before {
3117
- content: "\201e";
3118
- color: #888;
3119
  }
3120
- .icon-fi-icon-automate:before {
3121
- content: "\152";
3122
- color: #888;
3123
  }
3124
- .icon-fi-academy:before {
3125
- content: "\3c0";
3126
- color: #888;
3127
  }
3128
- .icon-fi-wordpress:before {
3129
  content: "\77";
3130
- color: #888;
3131
- }
3132
- .icon-fi-infinity:before {
3133
- content: "\56";
3134
- color: #888;
3135
- }
3136
- .icon-fi-audio-sound:before {
3137
- content: "\e9ae";
3138
- color: #888;
3139
- }
3140
- .icon-fi-sitemap:before {
3141
- content: "\b8";
3142
- color: #888;
3143
- }
3144
- .icon-fi-google-analytics:before {
3145
- content: "\e5";
3146
- color: #888;
3147
- }
3148
- .icon-fi-progress:before {
3149
- content: "\e9b1";
3150
- color: #888;
3151
- }
3152
- .icon-fi-dashboard:before {
3153
- content: "\e9b2";
3154
- color: #888;
3155
- }
3156
- .icon-fi-ab-testing:before {
3157
- content: "\bb";
3158
- color: #888;
3159
- }
3160
- .icon-fi-testing-bottle-beaker:before {
3161
- content: "\e9b4";
3162
- color: #888;
3163
- }
3164
- .icon-fi-archive:before {
3165
- content: "\62";
3166
- color: #888;
3167
- }
3168
- .icon-fi-zip:before {
3169
- content: "\3a9";
3170
- color: #888;
3171
- }
3172
- .icon-fi-arrow-location:before {
3173
- content: "\4d";
3174
- color: #888;
3175
- }
3176
- .icon-fi-arrow-pointer-cursor:before {
3177
- content: "\4e";
3178
- color: #888;
3179
- }
3180
- .icon-fi-code:before {
3181
- content: "\3a";
3182
- color: #888;
3183
- }
3184
- .icon-fi-news-paper:before {
3185
- content: "\2211";
3186
- color: #888;
3187
- }
3188
- .icon-fi-gallery-slider:before {
3189
- content: "\f7";
3190
- color: #888;
3191
- }
3192
- .icon-fi-layout:before {
3193
- content: "\a9";
3194
- color: #888;
3195
- }
3196
- .icon-fi-storage-server-data:before {
3197
- content: "\ce";
3198
- color: #888;
3199
- }
3200
- .icon-fi-loader:before {
3201
- content: "\e9be";
3202
- color: #888;
3203
- }
3204
- .icon-fi-rocket-launch:before {
3205
- content: "\e9bf";
3206
- color: #888;
3207
- }
3208
- .icon-fi-target:before {
3209
- content: "\2020";
3210
- color: #888;
3211
  }
3212
 
3213
  /* ****************************************************************************
45
  }
46
  .wpmud #wpbody {
47
  background: #F4F4F4;
48
+ -webkit-font-smoothing: antialiased !important;
49
  }
50
  .wpmud #wpbody * {
51
  box-sizing: border-box;
69
  display: block;
70
  margin: 0.5em auto;
71
  padding: 0;
72
+ line-height: 1em;
73
+ text-align: center;
74
+ color: #777771;
75
  }
76
  .wpmud h1,
77
  .wpmud h2,
355
  }
356
  .wpmud .box-footer {
357
  text-align: center;
358
+ margin-top: 32px;
359
+ font-size: 16px;
360
  }
361
 
362
  /* ****************************************************************************
994
  top: 0;
995
  padding: 0 24px;
996
  line-height: 60px;
997
+ font-size: 24px;
998
+ font-weight: 400;
999
+ color: #BABABA;
1000
+ cursor: pointer;
1001
  }
1002
  .wpmud .dev-overlay .title .close:hover {
1003
  color: #777771;
1298
  .wpmud .notice-dismiss:hover,
1299
  .wpmud .notice-dismiss:focus,
1300
  .wpmud .notice-dismiss:active {
1301
+ border: none;
1302
+ margin: 0;
1303
+ padding: 9px;
1304
+ background: none;
1305
+ color: #b4b9be;
1306
+ cursor: pointer;
1307
  }
1308
 
1309
  /* ****************************************************************************
1669
  }
1670
  .wpmud .select-list-container .list-results {
1671
  position: absolute;
1672
+ top: 41px;
1673
+ left: -9999px;
1674
+ right: -9999px;
1675
+ z-index: 1010;
1676
+ width: 0;
1677
+ border-top: 0;
1678
  background: #FFF;
1679
  border: 1px solid #ddd;
1680
  margin-left: -1px;
1810
  opacity: 0.8;
1811
 
1812
  font-family: 'WPMU-DEV-App-Icons';
1813
+ speak: none;
1814
+ font-style: normal;
1815
+ font-weight: normal;
1816
+ font-variant: normal;
1817
+ text-transform: none;
1818
+ line-height: 1;
1819
+ -webkit-font-smoothing: antialiased;
1820
+ -moz-osx-font-smoothing: grayscale;
1821
  }
1822
  .wpmud .listing li.circle:before {
1823
  content: "\68";
2186
  vertical-align: middle;
2187
  height: 30px;
2188
  line-height: 24px;
2189
+ color: #b6b6b6;
2190
+ cursor: default;
2191
+ font-weight: normal;
2192
  }
2193
  .wpmud .count.reply:before {
2194
+ content: '';
2195
+ position: absolute;
2196
+ bottom: -8px;
2197
+ right: 4px;
2198
+ border-width: 8px 0px 0px 12px;
2199
+ border-style: solid;
2200
+ border-color: #DDDDDD transparent;
2201
+ display: block;
2202
+ width: 0;
2203
  }
2204
  .wpmud .count.reply:after {
2205
+ content: '';
2206
+ position: absolute;
2207
+ bottom: -4px;
2208
+ right: 6px;
2209
+ border-width: 4px 0px 0px 6px;
2210
+ border-style: solid;
2211
+ border-color: #fff transparent;
2212
+ display: block;
2213
+ width: 0;
2214
  }
2215
  .wpmud .count.reply.mirror:before {
2216
+ left: 4px;
2217
+ border-width: 8px 12px 0px 0px;
2218
  }
2219
  .wpmud .count.reply.mirror:after {
2220
+ left: 6px;
2221
+ border-width: 4px 6px 0px 0px;
2222
  }
2223
  .wpmud .count.notification {
2224
+ background: #fecf2f;
2225
+ border-color: #fecf2f;
2226
+ color: #fff;
2227
  }
2228
  .wpmud .count.notification:before,
2229
  .wpmud .count.notification:after {
2230
+ border-color: #fecf2f transparent;
2231
  }
2232
 
2233
  /* ****************************************************************************
2293
  * 23. FONTAWESOME
2294
  */
2295
  @font-face {
2296
+ font-family: 'FontAwesomeWdv';
2297
+ src: url('font/fontawesome-webfont.eot');
2298
+ src: url('font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),
2299
+ url('font/fontawesome-webfont.woff') format('woff'),
2300
+ url('font/fontawesome-webfont.ttf') format('truetype'),
2301
+ url('font/fontawesome-webfont.svgz#FontAwesomeRegular') format('svg'),
2302
+ url('font/fontawesome-webfont.svg#FontAwesomeRegular') format('svg');
2303
+ font-weight: normal;
2304
+ font-style: normal;
2305
  }
2306
  .wdv-icon:before{font-family:FontAwesomeWdv;font-weight:normal;font-style:normal;display:inline-block;text-decoration:inherit}a .wdv-icon{display:inline-block;text-decoration:inherit}.wdv-icon-large:before{vertical-align:top;font-size:1.3333333333333333em}.btn .wdv-icon{line-height:.9em}li .wdv-icon, .action_links .wdv-icon, .wdv-icon.wdv-icon-fw{display:inline-block;width:1.25em;text-align:center}li .wdv-icon-large.wdv-icon,li .wdv-icon-large.wdv-icon{width:1.875em}li.wdv-icon{margin-left:0;list-style-type:none}li.wdv-icon:before{text-indent:-2em;text-align:center}li.wdv-icon.wdv-icon-large:before{text-indent:-1.3333333333333333em}.wdv-icon-glass:before{content:"\f000"}.wdv-icon-music:before{content:"\f001"}.wdv-icon-search:before{content:"\f002"}.wdv-icon-envelope:before{content:"\f003"}.wdv-icon-heart:before{content:"\f004"}.wdv-icon-star:before{content:"\f005"}.wdv-icon-star-empty:before{content:"\f006"}.wdv-icon-user:before{content:"\f007"}.wdv-icon-film:before{content:"\f008"}.wdv-icon-th-large:before{content:"\f009"}.wdv-icon-th:before{content:"\f00a"}.wdv-icon-th-list:before{content:"\f00b"}.wdv-icon-ok:before{content:"\f00c"}.wdv-icon-remove:before{content:"\f00d"}.wdv-icon-zoom-in:before{content:"\f00e"}.wdv-icon-zoom-out:before{content:"\f010"}.wdv-icon-off:before{content:"\f011"}.wdv-icon-signal:before{content:"\f012"}.wdv-icon-cog:before{content:"\f013"}.wdv-icon-trash:before{content:"\f014"}.wdv-icon-home:before{content:"\f015"}.wdv-icon-file:before{content:"\f016"}.wdv-icon-time:before{content:"\f017"}.wdv-icon-road:before{content:"\f018"}.wdv-icon-download-alt:before{content:"\f019"}.wdv-icon-download:before{content:"\f01a"}.wdv-icon-upload:before{content:"\f01b"}.wdv-icon-inbox:before{content:"\f01c"}.wdv-icon-play-circle:before{content:"\f01d"}.wdv-icon-repeat:before{content:"\f01e"}.wdv-icon-refresh:before{content:"\f021"}.wdv-icon-list-alt:before{content:"\f022"}.wdv-icon-lock:before{content:"\f023"}.wdv-icon-flag:before{content:"\f024"}.wdv-icon-headphones:before{content:"\f025"}.wdv-icon-volume-off:before{content:"\f026"}.wdv-icon-volume-down:before{content:"\f027"}.wdv-icon-volume-up:before{content:"\f028"}.wdv-icon-qrcode:before{content:"\f029"}.wdv-icon-barcode:before{content:"\f02a"}.wdv-icon-tag:before{content:"\f02b"}.wdv-icon-tags:before{content:"\f02c"}.wdv-icon-book:before{content:"\f02d"}.wdv-icon-bookmark:before{content:"\f02e"}.wdv-icon-print:before{content:"\f02f"}.wdv-icon-camera:before{content:"\f030"}.wdv-icon-font:before{content:"\f031"}.wdv-icon-bold:before{content:"\f032"}.wdv-icon-italic:before{content:"\f033"}.wdv-icon-text-height:before{content:"\f034"}.wdv-icon-text-width:before{content:"\f035"}.wdv-icon-align-left:before{content:"\f036"}.wdv-icon-align-center:before{content:"\f037"}.wdv-icon-align-right:before{content:"\f038"}.wdv-icon-align-justify:before{content:"\f039"}.wdv-icon-list:before{content:"\f03a"}.wdv-icon-indent-left:before{content:"\f03b"}.wdv-icon-indent-right:before{content:"\f03c"}.wdv-icon-facetime-video:before{content:"\f03d"}.wdv-icon-picture:before{content:"\f03e"}.wdv-icon-pencil:before{content:"\f040"}.wdv-icon-map-marker:before{content:"\f041"}.wdv-icon-adjust:before{content:"\f042"}.wdv-icon-tint:before{content:"\f043"}.wdv-icon-edit:before{content:"\f044"}.wdv-icon-share:before{content:"\f045"}.wdv-icon-check:before{content:"\f046"}.wdv-icon-move:before{content:"\f047"}.wdv-icon-step-backward:before{content:"\f048"}.wdv-icon-fast-backward:before{content:"\f049"}.wdv-icon-backward:before{content:"\f04a"}.wdv-icon-play:before{content:"\f04b"}.wdv-icon-pause:before{content:"\f04c"}.wdv-icon-stop:before{content:"\f04d"}.wdv-icon-forward:before{content:"\f04e"}.wdv-icon-fast-forward:before{content:"\f050"}.wdv-icon-step-forward:before{content:"\f051"}.wdv-icon-eject:before{content:"\f052"}.wdv-icon-chevron-left:before{content:"\f053"}.wdv-icon-chevron-right:before{content:"\f054"}.wdv-icon-plus-sign:before{content:"\f055"}.wdv-icon-minus-sign:before{content:"\f056"}.wdv-icon-remove-sign:before{content:"\f057"}.wdv-icon-ok-sign:before{content:"\f058"}.wdv-icon-question-sign:before{content:"\f059"}.wdv-icon-info-sign:before{content:"\f05a"}.wdv-icon-screenshot:before{content:"\f05b"}.wdv-icon-remove-circle:before{content:"\f05c"}.wdv-icon-ok-circle:before{content:"\f05d"}.wdv-icon-ban-circle:before{content:"\f05e"}.wdv-icon-arrow-left:before{content:"\f060"}.wdv-icon-arrow-right:before{content:"\f061"}.wdv-icon-arrow-up:before{content:"\f062"}.wdv-icon-arrow-down:before{content:"\f063"}.wdv-icon-share-alt:before{content:"\f064"}.wdv-icon-resize-full:before{content:"\f065"}.wdv-icon-resize-small:before{content:"\f066"}.wdv-icon-plus:before{content:"\f067"}.wdv-icon-minus:before{content:"\f068"}.wdv-icon-asterisk:before{content:"\f069"}.wdv-icon-exclamation-sign:before{content:"\f06a"}.wdv-icon-gift:before{content:"\f06b"}.wdv-icon-leaf:before{content:"\f06c"}.wdv-icon-fire:before{content:"\f06d"}.wdv-icon-eye-open:before{content:"\f06e"}.wdv-icon-eye-close:before{content:"\f070"}.wdv-icon-warning-sign:before{content:"\f071"}.wdv-icon-plane:before{content:"\f072"}.wdv-icon-calendar:before{content:"\f073"}.wdv-icon-random:before{content:"\f074"}.wdv-icon-comment:before{content:"\f075"}.wdv-icon-magnet:before{content:"\f076"}.wdv-icon-chevron-up:before{content:"\f077"}.wdv-icon-chevron-down:before{content:"\f078"}.wdv-icon-retweet:before{content:"\f079"}.wdv-icon-shopping-cart:before{content:"\f07a"}.wdv-icon-folder-close:before{content:"\f07b"}.wdv-icon-folder-open:before{content:"\f07c"}.wdv-icon-resize-vertical:before{content:"\f07d"}.wdv-icon-resize-horizontal:before{content:"\f07e"}.wdv-icon-bar-chart:before{content:"\f080"}.wdv-icon-twitter-sign:before{content:"\f081"}.wdv-icon-facebook-sign:before{content:"\f082"}.wdv-icon-camera-retro:before{content:"\f083"}.wdv-icon-key:before{content:"\f084"}.wdv-icon-cogs:before{content:"\f085"}.wdv-icon-comments:before{content:"\f086"}.wdv-icon-thumbs-up:before{content:"\f087"}.wdv-icon-thumbs-down:before{content:"\f088"}.wdv-icon-star-half:before{content:"\f089"}.wdv-icon-heart-empty:before{content:"\f08a"}.wdv-icon-signout:before{content:"\f08b"}.wdv-icon-linkedin-sign:before{content:"\f08c"}.wdv-icon-pushpin:before{content:"\f08d"}.wdv-icon-external-link:before{content:"\f08e"}.wdv-icon-signin:before{content:"\f090"}.wdv-icon-trophy:before{content:"\f091"}.wdv-icon-github-sign:before{content:"\f092"}.wdv-icon-upload-alt:before{content:"\f093"}.wdv-icon-lemon:before{content:"\f094"}.wdv-icon-phone:before{content:"\f095"}.wdv-icon-check-empty:before{content:"\f096"}.wdv-icon-bookmark-empty:before{content:"\f097"}.wdv-icon-phone-sign:before{content:"\f098"}.wdv-icon-twitter:before{content:"\f099"}.wdv-icon-facebook:before{content:"\f09a"}.wdv-icon-github:before{content:"\f09b"}.wdv-icon-unlock:before{content:"\f09c"}.wdv-icon-credit-card:before{content:"\f09d"}.wdv-icon-rss:before{content:"\f09e"}.wdv-icon-hdd:before{content:"\f0a0"}.wdv-icon-bullhorn:before{content:"\f0a1"}.wdv-icon-bell:before{content:"\f0a2"}.wdv-icon-certificate:before{content:"\f0a3"}.wdv-icon-hand-right:before{content:"\f0a4"}.wdv-icon-hand-left:before{content:"\f0a5"}.wdv-icon-hand-up:before{content:"\f0a6"}.wdv-icon-hand-down:before{content:"\f0a7"}.wdv-icon-circle-arrow-left:before{content:"\f0a8"}.wdv-icon-circle-arrow-right:before{content:"\f0a9"}.wdv-icon-circle-arrow-up:before{content:"\f0aa"}.wdv-icon-circle-arrow-down:before{content:"\f0ab"}.wdv-icon-globe:before{content:"\f0ac"}.wdv-icon-wrench:before{content:"\f0ad"}.wdv-icon-tasks:before{content:"\f0ae"}.wdv-icon-filter:before{content:"\f0b0"}.wdv-icon-briefcase:before{content:"\f0b1"}.wdv-icon-fullscreen:before{content:"\f0b2"}.wdv-icon-group:before{content:"\f0c0"}.wdv-icon-link:before{content:"\f0c1"}.wdv-icon-cloud:before{content:"\f0c2"}.wdv-icon-beaker:before{content:"\f0c3"}.wdv-icon-cut:before{content:"\f0c4"}.wdv-icon-copy:before{content:"\f0c5"}.wdv-icon-paper-clip:before{content:"\f0c6"}.wdv-icon-save:before{content:"\f0c7"}.wdv-icon-sign-blank:before{content:"\f0c8"}.wdv-icon-reorder:before{content:"\f0c9"}.wdv-icon-list-ul:before{content:"\f0ca"}.wdv-icon-list-ol:before{content:"\f0cb"}.wdv-icon-strikethrough:before{content:"\f0cc"}.wdv-icon-underline:before{content:"\f0cd"}.wdv-icon-table:before{content:"\f0ce"}.wdv-icon-magic:before{content:"\f0d0"}.wdv-icon-truck:before{content:"\f0d1"}.wdv-icon-pinterest:before{content:"\f0d2"}.wdv-icon-pinterest-sign:before{content:"\f0d3"}.wdv-icon-google-plus-sign:before{content:"\f0d4"}.wdv-icon-google-plus:before{content:"\f0d5"}.wdv-icon-money:before{content:"\f0d6"}.wdv-icon-caret-down:before{content:"\f0d7"}.wdv-icon-caret-up:before{content:"\f0d8"}.wdv-icon-caret-left:before{content:"\f0d9"}.wdv-icon-caret-right:before{content:"\f0da"}.wdv-icon-columns:before{content:"\f0db"}.wdv-icon-sort:before{content:"\f0dc"}.wdv-icon-sort-down:before{content:"\f0dd"}.wdv-icon-sort-up:before{content:"\f0de"}.wdv-icon-envelope-alt:before{content:"\f0e0"}.wdv-icon-linkedin:before{content:"\f0e1"}.wdv-icon-undo:before{content:"\f0e2"}.wdv-icon-legal:before{content:"\f0e3"}.wdv-icon-dashboard:before{content:"\f0e4"}.wdv-icon-comment-alt:before{content:"\f0e5"}.wdv-icon-comments-alt:before{content:"\f0e6"}.wdv-icon-bolt:before{content:"\f0e7"}.wdv-icon-sitemap:before{content:"\f0e8"}.wdv-icon-umbrella:before{content:"\f0e9"}.wdv-icon-paste:before{content:"\f0ea"}.wdv-icon-user-md:before{content:"\f200"}
2307
 
2345
  -webkit-font-smoothing: antialiased;
2346
  -moz-osx-font-smoothing: grayscale;
2347
  }
2348
+ .dev-icon-comment:before {
2349
+ content: "\41";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2350
  }
2351
+ .dev-icon-speach:before {
2352
+ content: "\6d";
 
2353
  }
2354
+ .dev-icon-speach_alt:before {
2355
  content: "\3d";
 
 
 
 
 
 
 
 
 
2356
  }
2357
+ .dev-icon-download:before {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2358
  content: "\42";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2359
  }
2360
+ .dev-icon-download_alt:before {
2361
+ content: "\69";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2362
  }
2363
+ .dev-icon-upload:before {
2364
+ content: "\56";
 
2365
  }
2366
+ .dev-icon-error:before {
2367
+ content: "\45";
 
2368
  }
2369
+ .dev-icon-archive:before {
2370
+ content: "\4f";
 
2371
  }
2372
+ .dev-icon-logo:before {
2373
  content: "\39";
 
2374
  }
2375
+ .dev-icon-logo_alt:before {
2376
  content: "\30";
 
 
 
 
 
 
 
 
 
 
 
 
 
2377
  }
2378
+ .dev-icon-wordpress:before {
2379
+ content: "\47";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2380
  }
2381
+ .dev-icon-facebook:before {
2382
+ content: "\46";
 
2383
  }
2384
+ .dev-icon-twitter:before {
2385
+ content: "\49";
 
2386
  }
2387
+ .dev-icon-github:before {
2388
+ content: "\4a";
 
2389
  }
2390
+ .dev-icon-stackoverflow:before {
2391
+ content: "\4b";
 
2392
  }
2393
+ .dev-icon-linkedin:before {
2394
+ content: "\4c";
 
2395
  }
2396
+ .dev-icon-medium:before {
2397
+ content: "\4d";
 
2398
  }
2399
+ .dev-icon-quora:before {
2400
+ content: "\51";
 
2401
  }
2402
+ .dev-icon-seo:before {
2403
+ content: "\53";
 
2404
  }
2405
+ .dev-icon-minify:before {
2406
+ content: "\4e";
 
2407
  }
2408
+ .dev-icon-uptime:before {
2409
+ content: "\55";
 
2410
  }
2411
+ .dev-icon-world:before {
2412
+ content: "\57";
 
2413
  }
2414
+ .dev-icon-pos_footer:before {
2415
  content: "\59";
 
2416
  }
2417
+ .dev-icon-pos_middle:before {
2418
+ content: "\58";
 
 
 
 
 
 
 
 
 
 
 
 
 
2419
  }
2420
+ .dev-icon-pos_header:before {
2421
+ content: "\43";
 
2422
  }
2423
+ .dev-icon-book:before {
2424
+ content: "\62";
 
2425
  }
2426
+ .dev-icon-support:before {
2427
+ content: "\6e";
 
2428
  }
2429
+ .dev-icon-rocket:before {
2430
+ content: "\6a";
 
2431
  }
2432
+ .dev-icon-rocket_alt:before {
2433
+ content: "\76";
 
2434
  }
2435
+ .dev-icon-lock:before {
2436
+ content: "\61";
 
2437
  }
2438
+ .dev-icon-unlock:before {
2439
+ content: "\63";
 
2440
  }
2441
+ .dev-icon-plugin:before {
2442
+ content: "\64";
 
2443
  }
2444
+ .dev-icon-caret_up:before {
2445
+ content: "\72";
 
2446
  }
2447
+ .dev-icon-caret_right:before {
2448
+ content: "\33";
 
2449
  }
2450
+ .dev-icon-caret_down:before {
2451
+ content: "\65";
 
2452
  }
2453
+ .dev-icon-caret_left:before {
2454
+ content: "\7c";
 
2455
  }
2456
+ .dev-icon-power:before {
2457
  content: "\66";
 
2458
  }
2459
+ .dev-icon-radio_default:before {
2460
  content: "\68";
 
2461
  }
2462
+ .dev-icon-radio:before {
2463
+ content: "\68";
 
 
 
 
 
 
 
 
 
2464
  }
2465
+ .dev-icon-radio_checked:before {
2466
+ content: "\67";
 
2467
  }
2468
+ .dev-icon-cross:before {
2469
  content: "\79";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2470
  }
2471
+ .dev-icon-tick:before {
2472
+ content: "\7a";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2473
  }
2474
+ .dev-icon-search:before {
2475
+ content: "\6b";
 
2476
  }
2477
+ .dev-icon-info:before {
2478
+ content: "\70";
 
2479
  }
2480
+ .dev-icon-devman:before {
2481
  content: "\31";
 
 
 
 
 
 
 
 
 
2482
  }
2483
+ .dev-icon-upfront:before {
2484
+ content: "\37";
 
 
 
 
 
 
 
 
 
2485
  }
2486
+ .dev-icon-hummingbird:before {
2487
  content: "\48";
 
2488
  }
2489
+ .dev-icon-defender:before {
2490
+ content: "\44";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2491
  }
2492
+ .dev-icon-theme:before {
2493
+ content: "\6c";
 
2494
  }
2495
+ .dev-icon-pencil:before {
2496
  content: "\50";
 
2497
  }
2498
+ .dev-icon-star:before {
2499
+ content: "\5a";
 
 
 
 
 
2500
  }
2501
+ .dev-icon-trash:before {
2502
+ content: "\54";
 
2503
  }
2504
+ .dev-icon-recycle:before {
2505
+ content: "\52";
 
2506
  }
2507
+ .dev-icon-fix:before {
2508
  content: "\32";
 
 
 
 
 
 
 
 
 
 
 
 
 
2509
  }
2510
+ .dev-icon-edit:before {
2511
+ content: "\6f";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2512
  }
2513
+ .dev-icon-options:before {
2514
+ content: "\73";
 
2515
  }
2516
+ .dev-icon-cog:before {
2517
+ content: "\74";
 
2518
  }
2519
+ .dev-icon-badge:before {
2520
+ content: "\71";
 
2521
  }
2522
+ .dev-icon-cylinder:before {
2523
+ content: "\75";
 
2524
  }
2525
+ .dev-icon-trophy:before {
2526
+ content: "\78";
 
2527
  }
2528
+ .dev-icon-bell:before {
2529
  content: "\77";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2530
  }
2531
 
2532
  /* ****************************************************************************
extras/dash-notice/wpmudev-dash-notification.php DELETED
@@ -1,1306 +0,0 @@
1
- <?php
2
- /////////////////////////////////////////////////////////////////////////
3
- /* -------- WPMU DEV Dashboard Notice - Aaron Edwards (Incsub) ------- */
4
- /* This provides notices of available updates for our premium products */
5
- if ( ! class_exists( 'WPMUDEV_Dashboard_Notice4' ) ) {
6
- class WPMUDEV_Dashboard_Notice4 {
7
-
8
- var $version = '4.2';
9
- var $screen_id = false;
10
- var $product_name = false;
11
- var $product_update = false;
12
- var $theme_pack = 128;
13
- var $server_url = 'https://premium.wpmudev.org/api/dashboard/v1/';
14
- var $update_count = 0;
15
-
16
- function __construct() {
17
- add_action( 'init', array( &$this, 'init' ) );
18
- add_action( 'plugins_loaded', array( &$this, 'remove_older' ), 5 );
19
- }
20
-
21
- function remove_older() {
22
- global $WPMUDEV_Dashboard_Notice3;
23
-
24
- //remove 3.0 notices
25
- if ( is_object( $WPMUDEV_Dashboard_Notice3 ) ) {
26
- remove_action( 'init', array( $WPMUDEV_Dashboard_Notice3, 'init' ) );
27
- remove_action( 'plugins_loaded', array( $WPMUDEV_Dashboard_Notice3, 'init' ) );
28
- } else if ( method_exists( 'WPMUDEV_Dashboard_Notice3', 'init' ) ) { //if class is not in global (some projects included inside a method), we have to use a hacky way to remove the filter
29
- $this->deregister_hook( 'init', 'WPMUDEV_Dashboard_Notice3', 'init', 10 );
30
- $this->deregister_hook( 'plugins_loaded', 'WPMUDEV_Dashboard_Notice3', 'init', 10 );
31
- }
32
-
33
- //remove version 2.0
34
- if ( method_exists( 'WPMUDEV_Dashboard_Notice', 'init' ) ) {
35
- $this->deregister_hook( 'init', 'WPMUDEV_Dashboard_Notice', 'init', 10 );
36
- $this->deregister_hook( 'plugins_loaded', 'WPMUDEV_Dashboard_Notice', 'init', 10 );
37
- }
38
-
39
- //remove version 1.0
40
- remove_action( 'admin_notices', 'wdp_un_check', 5 );
41
- remove_action( 'network_admin_notices', 'wdp_un_check', 5 );
42
- }
43
-
44
- /* Adapted from: https://github.com/herewithme/wp-filters-extras/ - Copyright 2012 Amaury Balmer - amaury@beapi.fr */
45
- function deregister_hook( $hook_name, $class_name, $method_name, $priority ) {
46
- global $wp_filter;
47
-
48
- // Take only filters on right hook name and priority
49
- if ( ! isset( $wp_filter[ $hook_name ][ $priority ] ) || ! is_array( $wp_filter[ $hook_name ][ $priority ] ) ) {
50
- return false;
51
- }
52
-
53
- // Loop on filters registered
54
- foreach ( (array) $wp_filter[ $hook_name ][ $priority ] as $unique_id => $filter_array ) {
55
- // Test if filter is an array ! (always for class/method)
56
- if ( isset( $filter_array['function'] ) && is_array( $filter_array['function'] ) ) {
57
- // Test if object is a class, class and method is equal to param !
58
- if ( is_object( $filter_array['function'][0] ) && get_class( $filter_array['function'][0] ) && get_class( $filter_array['function'][0] ) == $class_name && $filter_array['function'][1] == $method_name ) {
59
- if ( class_exists( 'WP_Hook' ) ) { //introduced in WP 4.7 https://make.wordpress.org/core/2016/09/08/wp_hook-next-generation-actions-and-filters/
60
- unset( $wp_filter[ $hook_name ]->callbacks[ $priority ][ $unique_id ] );
61
- } else {
62
- unset( $wp_filter[ $hook_name ][ $priority ][ $unique_id ] );
63
- }
64
- return true;
65
- }
66
- }
67
- }
68
-
69
- return false;
70
- }
71
-
72
- function init() {
73
- global $wpmudev_un;
74
-
75
- if ( class_exists( 'WPMUDEV_Dashboard' ) || ( isset( $wpmudev_un->version ) && version_compare( $wpmudev_un->version, '3.4', '<' ) ) ) {
76
- return;
77
- }
78
-
79
- // Schedule update cron on main site only
80
- if ( is_main_site() ) {
81
- if ( ! wp_next_scheduled( 'wpmudev_scheduled_jobs' ) ) {
82
- wp_schedule_event( time(), 'twicedaily', 'wpmudev_scheduled_jobs' );
83
- }
84
-
85
- add_action( 'wpmudev_scheduled_jobs', array( $this, 'updates_check' ) );
86
- }
87
- add_action( 'delete_site_transient_update_plugins', array(
88
- &$this,
89
- 'updates_check'
90
- ) ); //refresh after upgrade/install
91
- add_action( 'delete_site_transient_update_themes', array(
92
- &$this,
93
- 'updates_check'
94
- ) ); //refresh after upgrade/install
95
-
96
- if ( is_admin() && current_user_can( 'install_plugins' ) ) {
97
-
98
- add_action( 'site_transient_update_plugins', array( &$this, 'filter_plugin_count' ) );
99
- add_action( 'site_transient_update_themes', array( &$this, 'filter_theme_count' ) );
100
- add_filter( 'plugins_api', array(
101
- &$this,
102
- 'filter_plugin_info'
103
- ), 101, 3 ); //run later to work with bad autoupdate plugins
104
- add_filter( 'themes_api', array(
105
- &$this,
106
- 'filter_plugin_info'
107
- ), 101, 3 ); //run later to work with bad autoupdate plugins
108
- add_action( 'load-plugins.php', array( &$this, 'filter_plugin_rows' ), 21 ); //make sure it runs after WP's
109
- add_action( 'load-themes.php', array( &$this, 'filter_plugin_rows' ), 21 ); //make sure it runs after WP's
110
- add_action( 'core_upgrade_preamble', array( &$this, 'disable_checkboxes' ) );
111
- add_action( 'activated_plugin', array( &$this, 'set_activate_flag' ) );
112
- add_action( 'wp_ajax_wdpun-changelog', array( &$this, 'popup_changelog_ajax' ) );
113
- add_action( 'wp_ajax_wdpun-dismiss', array( &$this, 'dismiss_ajax' ) );
114
-
115
- //if dashboard is installed but not activated
116
- if ( file_exists( WP_PLUGIN_DIR . '/wpmudev-updates/update-notifications.php' ) ) {
117
- if ( ! get_site_option( 'wdp_un_autoactivated' ) ) {
118
- //include plugin API if necessary
119
- if ( ! function_exists( 'activate_plugin' ) ) {
120
- require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
121
- }
122
- $result = activate_plugin( '/wpmudev-updates/update-notifications.php', network_admin_url( 'admin.php?page=wpmudev' ), is_multisite() );
123
- if ( ! is_wp_error( $result ) ) { //if autoactivate successful don't show notices
124
- update_site_option( 'wdp_un_autoactivated', 1 );
125
-
126
- return;
127
- }
128
- }
129
-
130
- add_action( 'admin_print_styles', array( &$this, 'notice_styles' ) );
131
- add_action( 'admin_print_footer_scripts', array( &$this, 'notice_scripts' ) );
132
- add_action( 'all_admin_notices', array( &$this, 'activate_notice' ), 5 );
133
- } else { //dashboard not installed at all
134
- if ( get_site_option( 'wdp_un_autoactivated' ) ) {
135
- update_site_option( 'wdp_un_autoactivated', 0 );//reset flag when dashboard is deleted
136
- }
137
- add_action( 'admin_print_styles', array( &$this, 'notice_styles' ) );
138
- add_action( 'admin_print_footer_scripts', array( &$this, 'notice_scripts' ) );
139
- add_action( 'all_admin_notices', array( &$this, 'install_notice' ), 5 );
140
- }
141
- }
142
- }
143
-
144
- function is_allowed_screen() {
145
- global $wpmudev_notices;
146
- $screen = get_current_screen();
147
- if ($screen && is_object($screen)) $this->screen_id = $screen->id;
148
-
149
- //Show special message right after plugin activation
150
- if ( in_array( $this->screen_id, array(
151
- 'plugins',
152
- 'plugins-network'
153
- ) ) && ( isset( $_GET['activate'] ) || isset( $_GET['activate-multi'] ) )
154
- ) {
155
- $activated = get_site_option( 'wdp_un_activated_flag' );
156
- if ( $activated === false ) {
157
- $activated = 1;
158
- } //on first encounter of new installed notice show
159
- if ( $activated ) {
160
- if ( $activated >= 2 ) {
161
- update_site_option( 'wdp_un_activated_flag', 0 );
162
- } else {
163
- update_site_option( 'wdp_un_activated_flag', 2 );
164
- }
165
-
166
- return true;
167
- }
168
- }
169
-
170
- //check dismiss flag
171
- $dismissed = get_site_option( 'wdp_un_dismissed' );
172
- if ( $dismissed && $dismissed > strtotime( '-1 week' ) ) {
173
- return false;
174
- }
175
-
176
- //always show on certain core pages if updates are available
177
- $updates = get_site_option( 'wdp_un_updates_available' );
178
- if ( is_array( $updates ) && count( $updates ) ) {
179
- $this->update_count = count( $updates );
180
- if ( in_array( $this->screen_id, array(
181
- 'update-core',
182
- 'update-core-network'
183
- ) ) ) {
184
- return true;
185
- }
186
- }
187
-
188
- //check our registered plugins for hooks
189
- if ( isset( $wpmudev_notices ) && is_array( $wpmudev_notices ) ) {
190
- foreach ( $wpmudev_notices as $product ) {
191
- if ( isset( $product['screens'] ) && is_array( $product['screens'] ) && in_array( $this->screen_id, $product['screens'] ) ) {
192
- $this->product_name = $product['name'];
193
- //if this plugin needs updating flag it
194
- if ( isset( $product['id'] ) && isset( $updates[ $product['id'] ] ) ) {
195
- $this->product_update = true;
196
- }
197
-
198
- return true;
199
- }
200
- }
201
- }
202
-
203
- return false;
204
- }
205
-
206
- function auto_install_url() {
207
- $function = is_multisite() ? 'network_admin_url' : 'admin_url';
208
-
209
- return wp_nonce_url( $function( "update.php?action=install-plugin&plugin=install_wpmudev_dash" ), "install-plugin_install_wpmudev_dash" );
210
- }
211
-
212
- function activate_url() {
213
- $function = is_multisite() ? 'network_admin_url' : 'admin_url';
214
-
215
- return wp_nonce_url( $function( 'plugins.php?action=activate&plugin=wpmudev-updates%2Fupdate-notifications.php' ), 'activate-plugin_wpmudev-updates/update-notifications.php' );
216
- }
217
-
218
- function install_notice() {
219
- if ( ! $this->is_allowed_screen() ) return; ?>
220
-
221
- <div class="notice wdpun-notice" style="display: none;">
222
-
223
- <input type="hidden" name="msg_id" value="<?php _e( 'install', 'wpmudev' ); ?>" />
224
-
225
- <div class="wdpun-notice-logo"></div>
226
- <div class="wdpun-notice-message">
227
- <?php
228
- if ( $this->product_name ) {
229
- if ( $this->product_update ) {
230
- printf( __( 'Important updates are available for <strong>%s</strong>. Install the free WPMU DEV Dashboard plugin now for updates and support!', 'wpmudev' ), esc_html( $this->product_name ) );
231
- } else {
232
- printf( __( '<strong>%s</strong> is almost ready - install the free WPMU DEV Dashboard plugin for updates and support!', 'wpmudev' ), esc_html( $this->product_name ) );
233
- }
234
-
235
- } else if ( $this->update_count ) {
236
- _e( 'Important updates are available for your WPMU DEV plugins/themes. Install the free WPMU DEV Dashboard plugin now for updates and support!', 'wpmudev' );
237
- } else {
238
- _e( 'Almost ready - install the free WPMU DEV Dashboard plugin for updates and support!', 'wpmudev' );
239
- }
240
- ?>
241
- </div><!-- end wdpun-notice-message -->
242
- <div class="wdpun-notice-cta">
243
- <a href="<?php echo $this->auto_install_url(); ?>"
244
- class="wdpun-button wdpun-button-small"><?php _e( 'Install Plugin', 'wpmudev' ); ?></a>
245
-
246
- <button class="wdpun-button wdpun-button-notice-dismiss"
247
- data-msg="<?php _e( 'Saving...', 'wpmudev' ); ?>">
248
- <?php _e( 'Dismiss', 'wpmudev' ); ?>
249
- </button>
250
- </div><!-- end wdpun-notice-cta -->
251
-
252
- </div><!-- end notice wdpun-notice -->
253
-
254
- <?php
255
-
256
- return;
257
- }
258
-
259
- function activate_notice() {
260
- if ( ! $this->is_allowed_screen() ) return; ?>
261
-
262
- <div class="notice wdpun-notice" style="display: none;">
263
-
264
- <input type="hidden" name="msg_id" value="<?php _e( 'activate', 'wpmudev' ); ?>" />
265
-
266
- <div class="wdpun-notice-logo"><span></span></div>
267
- <div class="wdpun-notice-message">
268
- <?php
269
- if ( $this->product_name ) {
270
- if ( $this->product_update ) {
271
- printf( __( 'Important updates are available for <strong>%s</strong>. Activate the WPMU DEV Dashboard to update now!', 'wpmudev' ), esc_html( $this->product_name ) );
272
- } else {
273
- printf( __( 'Just one more step to enable updates and support for <strong>%s</strong>!', 'wpmudev' ), esc_html( $this->product_name ) );
274
- }
275
-
276
- } else if ( $this->update_count ) {
277
- _e( 'Important updates are available for your WPMU DEV plugins/themes. Activate the WPMU DEV Dashboard to update now!', 'wpmudev' );
278
- } else {
279
- _e( "Just one more step - activate the WPMU DEV Dashboard plugin and you're all done!", 'wpmudev' );
280
- }
281
- ?>
282
- </div><!-- end wdpun-notice-message -->
283
- <div class="wdpun-notice-cta">
284
- <a href="<?php echo $this->activate_url(); ?>"
285
- class="wdpun-button wdpun-button-small"><?php _e( 'Activate WPMU DEV Dashboard', 'wpmudev' ); ?></a>
286
-
287
- <button class="wdpun-button wdpun-button-notice-dismiss"
288
- data-msg="<?php _e( 'Saving...', 'wpmudev' ); ?>">
289
- <?php _e( 'Dismiss', 'wpmudev' ); ?>
290
- </button>
291
- </div><!-- end wdpun-notice-cta -->
292
-
293
- </div><!-- end notice wdpun-notice -->
294
-
295
- <?php
296
-
297
- return;
298
- }
299
-
300
- function notice_styles() {
301
- if ( !$this->is_allowed_screen() ) return;
302
- ?>
303
- <style type="text/css" media="all">
304
- .cf:after{content:"";display:table;clear:both}@media only screen and (min-width: 1200px){.hide-to-large{display:none}}@media only screen and (min-width: 1140px){.hide-to-desktop{display:none}}.wrap>.wdpun-notice.notice,.wrap #header>.wdpun-notice.notice{width:100%}.wrap #header>.wdpun-notice.notice{box-shadow:none}.wdpun-notice *,.wdpun-notice *:after,.wdpun-notice *:before{box-sizing:border-box}.wdpun-notice.notice{background:#fff;border:1px solid #E5E5E5;border-radius:6px;box-shadow:0 1px 1px 0 rgba(0,0,0,0.05);clear:both;display:block;font:400 13px/20px "Open Sans",Arial,sans-serif;overflow:hidden;margin:10px 20px 20px 0;min-height:80px;padding:0;position:relative;text-align:center;z-index:1}.wdpun-notice.notice.loading:before{background-color:rgba(255,255,255,0.7);bottom:0;content:attr(data-message);font-size:22px;font-weight:600;left:0;line-height:80px;position:absolute;right:0;text-align:center;top:0;z-index:5}.wdpun-notice.notice.loading>div{-webkit-filter:blur(2px);filter:blur(2px)}.wdpun-notice-logo{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjU2cHgiIGhlaWdodD0iNTZweCIgdmlld0JveD0iMCAwIDU2IDU2IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzLjguMyAoMjk4MDIpIC0gaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoIC0tPgogICAgPHRpdGxlPndwbXVkZXYtc3ZnPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9ImlQYWQtUHJvLUxhbmRzY2FwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjAwMDAwMCwgLTIyLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0id3BtdWRldi1zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzLjAwMDAwMCwgMjIuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjgsNTYgQzEyLjUzNTg3MSw1NiAwLDQzLjQ2NDEyOSAwLDI4IEMwLDEyLjUzNjc3NDIgMTIuNTM1ODcxLDAgMjgsMCBDNDMuNDY0MTI5LDAgNTYsMTIuNTM2Nzc0MiA1NiwyOCBDNTYsNDMuNDY0MTI5IDQzLjQ2NDEyOSw1NiAyOCw1NiBMMjgsNTYgWiIgaWQ9IkZpbGwtMSIgZmlsbD0iI0ZGRDAwNSI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTUxLjQ4Mzg3MSwyOCBDNTEuNDgzODcxLDQwLjk2OTQxOTQgNDAuOTY5NDE5NCw1MS40ODM4NzEgMjgsNTEuNDgzODcxIEMxNS4wMzA1ODA2LDUxLjQ4Mzg3MSA0LjUxNjEyOTAzLDQwLjk2OTQxOTQgNC41MTYxMjkwMywyOCBDNC41MTYxMjkwMywxNS4wMzA1ODA2IDE1LjAzMDU4MDYsNC41MTYxMjkwMyAyOCw0LjUxNjEyOTAzIEM0MC45Njk0MTk0LDQuNTE2MTI5MDMgNTEuNDgzODcxLDE1LjAzMDU4MDYgNTEuNDgzODcxLDI4IiBpZD0iRmlsbC0zIiBmaWxsPSIjMzMzMzMzIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDIuNzc4ODUxNiwzMi42NzY2MzIzIEw0Mi43Nzg4NTE2LDEyLjUzMTA4MzkgTDM5LjUzMDg1MTYsMTUuMDU4MzA5NyBMMzkuNTMwODUxNiwzMi42NzY2MzIzIEwzOS41MjcyMzg3LDMyLjY3NjYzMjMgQzM5LjUyNzIzODcsMzMuNzA4MTE2MSAzOC43ODI5ODA2LDM0LjU0NDUwMzIgMzcuODY2MjA2NSwzNC41NDQ1MDMyIEMzNi45NDY3MjI2LDM0LjU0NDUwMzIgMzYuMjAyNDY0NSwzMy43MDgxMTYxIDM2LjIwMjQ2NDUsMzIuNjc2NjMyMyBMMzYuMjA3ODgzOSwyMy4zMjM3MjkgQzM2LjIwNzg4MzksMjAuMjc0NDM4NyAzNC4wMDU4MTk0LDE3LjgwMTQwNjUgMzEuMjkwNzIyNiwxNy44MDE0MDY1IEMyOC41NzM4MTk0LDE3LjgwMTQwNjUgMjYuMzcyNjU4MSwyMC4yNzQ0Mzg3IDI2LjM3MjY1ODEsMjMuMzIzNzI5IEwyNi4zNzI2NTgxLDMyLjY3NjYzMjMgQzI2LjM3MjY1ODEsMzMuNzA4MTE2MSAyNS42Mjg0LDM0LjU0NDUwMzIgMjQuNzA4OTE2MSwzNC41NDQ1MDMyIEMyMy43OTIxNDE5LDM0LjU0NDUwMzIgMjMuMDQ1MTc0MiwzMy43MDgxMTYxIDIzLjA0NTE3NDIsMzIuNjc2NjMyMyBMMjMuMDUyNCwyMy4zMjM3MjkgQzIzLjA1MjQsMjAuMjc0NDM4NyAyMC44NTEyMzg3LDE3LjgwMTQwNjUgMTguMTM2MTQxOSwxNy44MDE0MDY1IEMxNS40MjEwNDUyLDE3LjgwMTQwNjUgMTMuMjE4OTgwNiwyMC4yNzQ0Mzg3IDEzLjIxODk4MDYsMjMuMzIzNzI5IEwxMy4yMjA3ODcxLDIzLjMyMzcyOSBMMTMuMjIwNzg3MSw0My40NjkyNzc0IEwxNi40Njg3ODcxLDQwLjk0MTE0ODQgTDE2LjQ3MjQsMjMuMzIzNzI5IEMxNi40NzI0LDIyLjI5MjI0NTIgMTcuMjE2NjU4MSwyMS40NTU4NTgxIDE4LjEzNjE0MTksMjEuNDU1ODU4MSBDMTkuMDU0NzIyNiwyMS40NTU4NTgxIDE5Ljc5OTg4MzksMjIuMjkyMjQ1MiAxOS43OTk4ODM5LDIzLjMyMzcyOSBMMTkuNzkyNjU4MSwzMi42NzY2MzIzIEMxOS43OTI2NTgxLDM1LjcyNTkyMjYgMjEuOTkzODE5NCwzOC4xOTg5NTQ4IDI0LjcwODkxNjEsMzguMTk4OTU0OCBDMjcuNDI0MDEyOSwzOC4xOTg5NTQ4IDI5LjYyNTE3NDIsMzUuNzI1OTIyNiAyOS42MjUxNzQyLDMyLjY3NjYzMjMgTDI5LjYyNDI3MSwzMi42NzY2MzIzIEwyOS42MjY5ODA2LDIzLjMyMzcyOSBDMjkuNjI2OTgwNiwyMi4yOTIyNDUyIDMwLjM3MjE0MTksMjEuNDU1ODU4MSAzMS4yOTA3MjI2LDIxLjQ1NTg1ODEgQzMyLjIwODQsMjEuNDU1ODU4MSAzMi45NTI2NTgxLDIyLjI5MjI0NTIgMzIuOTUyNjU4MSwyMy4zMjM3MjkgTDMyLjk0NzIzODcsMzIuNjc2NjMyMyBDMzIuOTQ3MjM4NywzNS43MjU5MjI2IDM1LjE0OTMwMzIsMzguMTk4OTU0OCAzNy44NjYyMDY1LDM4LjE5ODk1NDggQzQwLjU4MDQsMzguMTk4OTU0OCA0Mi43ODA2NTgxLDM1LjcyNTkyMjYgNDIuNzgwNjU4MSwzMi42NzY2MzIzIEw0Mi43Nzg4NTE2LDMyLjY3NjYzMjMgTDQyLjc3ODg1MTYsMzIuNjc2NjMyMyBaIiBpZD0iRmlsbC01IiBmaWxsPSIjRjlFQzFDIj48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==);background-repeat:no-repeat;background-position:50% 50%;display:block;height:56px;margin:10px auto 0;width:56px}.wdpun-notice .wdpun-notice-message{color:#23282D;display:block;font-family:"Open Sans",Arial,sans-serif;font-size:13px;line-height:20px;padding:10px}.wdpun-notice .wdpun-notice-message strong{font-weight:600}.wdpun-notice .wdpun-button{background:#00ACCA;border:1px solid #0087B9;border-radius:2px;color:#fff;cursor:pointer;display:block;font-weight:500;font-size:16px;height:auto;line-height:18px;margin:0;padding:10px 20px;text-decoration:none;-webkit-transition:color 0.3s, opacity 0.3s, background 0.3s;transition:color 0.3s, opacity 0.3s, background 0.3s;white-space:nowrap}.wdpun-notice .wdpun-button:hover:not(:focus):not(:active){background-color:#0093B1;color:#fff}.wdpun-notice .wdpun-button:focus,.wdpun-notice .wdpun-button:active{background:#0082a1;background:-webkit-linear-gradient(top, #0082a1 0%, #008fae 100%);background:linear-gradient(to bottom, #0082a1 0%, #008fae 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#0082a1', endColorstr='#008fae',GradientType=0 );border-color:transparent;color:#fff;outline-color:transparent;outline-style:none}.wdpun-notice .wdpun-button-small{padding:5px 15px}.wdpun-notice .wdpun-button-notice-dismiss{background:transparent;border:none;border-radius:0;color:#C5C5C5;padding:0;text-transform:none;-webkit-transition:color 0.3s;transition:color 0.3s}.wdpun-notice .wdpun-button-notice-dismiss:hover:not(:focus):not(:active),.wdpun-notice .wdpun-button-notice-dismiss:active,.wdpun-notice .wdpun-button-notice-dismiss:focus{background:transparent;color:#666}.wdpun-notice .wdpun-notice-cta{border-top:1px solid #E5E5E5;background:#F8F8F8;clear:both;display:block;padding:15px 20px;position:relative;text-align:center;white-space:nowrap}.wdpun-notice .wdpun-notice-cta .wdpun-button{vertical-align:middle}.wdpun-notice .wdpun-notice-cta .wdpun-button-notice-dismiss{margin:10px auto 0}.wdpun-notice .wdpun-notice-cta input[type="email"]{line-height:20px;margin:0;max-width:320px;min-width:50px;padding-right:0;padding-left:0;text-align:center;vertical-align:middle}@media only screen and (min-width: 601px){.wdpun-notice.notice{text-align:left}.wdpun-notice-logo{float:left;margin:10px}.wdpun-notice .wdpun-notice-message{margin-top:5px;margin-left:76px;padding:10px 20px 10px 10px}.wdpun-notice .wdpun-button{display:inline-block;font-size:14px}}@media only screen and (min-width: 783px){.wdpun-notice .wdpun-notice-cta .wdpun-button-notice-dismiss{margin-top:0}.wdpun-notice button+button,.wdpun-notice .wdpun-button+button,.wdpun-notice button+.wdpun-button,.wdpun-notice .wdpun-button+.wdpun-button,.wdpun-notice a+button,.wdpun-notice a+.wdpun-button{margin-left:10px}}@media only screen and (min-width: 961px){.wdpun-notice.notice{display:table}.wdpun-notice-logo{border-radius:0;height:auto;margin:0;min-height:80px;min-width:80px;width:5%}.wdpun-notice .wdpun-notice-logo,.wdpun-notice .wdpun-notice-message,.wdpun-notice .wdpun-notice-cta{cursor:default;display:table-cell;float:none;vertical-align:middle}.wdpun-notice .wdpun-notice-message{margin-top:0;max-width:100%;min-height:80px;width:75%}.wdpun-notice .wdpun-notice-cta{border-left:1px solid #E5E5E5;border-top:none;padding:0 30px;width:20%}}@media only screen and (min-width: 1140px){.wdpun-notice .wdpun-button{font-size:13px}}
305
- </style>
306
- <?php
307
- }
308
-
309
- function notice_scripts() {
310
- if ( !$this->is_allowed_screen() ) return;
311
- ?>
312
- <script type="text/javascript">
313
- !function($){function n(){function n(){a.fadeIn(500)}function i(){a.fadeTo(100,0,function(){a.slideUp(100,function(){a.remove()})})}function t(n,t){"0"!==e?(a.attr("data-message",t),a.addClass("saving"),s.action=n,jQuery.post(window.ajaxurl,s,i)):i()}var a=jQuery(".wdpun-notice"),e=a.find("input[name=msg_id]").val(),o=a.find(".wdpun-button-notice-dismiss"),s={};s.msg_id=e,o.click(function(n){n.preventDefault(),t("wdpun-dismiss",o.data("msg"))}),window.setTimeout(n,500)}$(n)}(jQuery);
314
- </script>
315
- <?php
316
- }
317
-
318
- function get_id_plugin( $plugin_file ) {
319
- return get_file_data( $plugin_file, array(
320
- 'name' => 'Plugin Name',
321
- 'id' => 'WDP ID',
322
- 'version' => 'Version'
323
- ) );
324
- }
325
-
326
- //simple check for updates
327
- function updates_check() {
328
- global $wp_version;
329
- $local_projects = array();
330
-
331
- //----------------------------------------------------------------------------------//
332
- //plugins directory
333
- //----------------------------------------------------------------------------------//
334
- $plugins_root = WP_PLUGIN_DIR;
335
- if ( empty( $plugins_root ) ) {
336
- $plugins_root = ABSPATH . 'wp-content/plugins';
337
- }
338
-
339
- $plugins_dir = @opendir( $plugins_root );
340
- $plugin_files = array();
341
- if ( $plugins_dir ) {
342
- while ( ( $file = readdir( $plugins_dir ) ) !== false ) {
343
- if ( substr( $file, 0, 1 ) == '.' ) {
344
- continue;
345
- }
346
- if ( is_dir( $plugins_root . '/' . $file ) ) {
347
- $plugins_subdir = @ opendir( $plugins_root . '/' . $file );
348
- if ( $plugins_subdir ) {
349
- while ( ( $subfile = readdir( $plugins_subdir ) ) !== false ) {
350
- if ( substr( $subfile, 0, 1 ) == '.' ) {
351
- continue;
352
- }
353
- if ( substr( $subfile, - 4 ) == '.php' ) {
354
- $plugin_files[] = "$file/$subfile";
355
- }
356
- }
357
- }
358
- } else {
359
- if ( substr( $file, - 4 ) == '.php' ) {
360
- $plugin_files[] = $file;
361
- }
362
- }
363
- }
364
- }
365
- @closedir( $plugins_dir );
366
- @closedir( $plugins_subdir );
367
-
368
- if ( $plugins_dir && ! empty( $plugin_files ) ) {
369
- foreach ( $plugin_files as $plugin_file ) {
370
- if ( is_readable( "$plugins_root/$plugin_file" ) ) {
371
-
372
- unset( $data );
373
- $data = $this->get_id_plugin( "$plugins_root/$plugin_file" );
374
-
375
- if ( isset( $data['id'] ) && ! empty( $data['id'] ) ) {
376
- $local_projects[ $data['id'] ]['type'] = 'plugin';
377
- $local_projects[ $data['id'] ]['version'] = $data['version'];
378
- $local_projects[ $data['id'] ]['filename'] = $plugin_file;
379
- }
380
- }
381
- }
382
- }
383
-
384
- //----------------------------------------------------------------------------------//
385
- // mu-plugins directory
386
- //----------------------------------------------------------------------------------//
387
- $mu_plugins_root = WPMU_PLUGIN_DIR;
388
- if ( empty( $mu_plugins_root ) ) {
389
- $mu_plugins_root = ABSPATH . 'wp-content/mu-plugins';
390
- }
391
-
392
- if ( is_dir( $mu_plugins_root ) && $mu_plugins_dir = @opendir( $mu_plugins_root ) ) {
393
- while ( ( $file = readdir( $mu_plugins_dir ) ) !== false ) {
394
- if ( substr( $file, - 4 ) == '.php' ) {
395
- if ( is_readable( "$mu_plugins_root/$file" ) ) {
396
-
397
- unset( $data );
398
- $data = $this->get_id_plugin( "$mu_plugins_root/$file" );
399
-
400
- if ( isset( $data['id'] ) && ! empty( $data['id'] ) ) {
401
- $local_projects[ $data['id'] ]['type'] = 'mu-plugin';
402
- $local_projects[ $data['id'] ]['version'] = $data['version'];
403
- $local_projects[ $data['id'] ]['filename'] = $file;
404
- }
405
- }
406
- }
407
- }
408
- @closedir( $mu_plugins_dir );
409
- }
410
-
411
- //----------------------------------------------------------------------------------//
412
- // wp-content directory
413
- //----------------------------------------------------------------------------------//
414
- $content_plugins_root = WP_CONTENT_DIR;
415
- if ( empty( $content_plugins_root ) ) {
416
- $content_plugins_root = ABSPATH . 'wp-content';
417
- }
418
-
419
- $content_plugins_dir = @opendir( $content_plugins_root );
420
- $content_plugin_files = array();
421
- if ( $content_plugins_dir ) {
422
- while ( ( $file = readdir( $content_plugins_dir ) ) !== false ) {
423
- if ( substr( $file, 0, 1 ) == '.' ) {
424
- continue;
425
- }
426
- if ( ! is_dir( $content_plugins_root . '/' . $file ) ) {
427
- if ( substr( $file, - 4 ) == '.php' ) {
428
- $content_plugin_files[] = $file;
429
- }
430
- }
431
- }
432
- }
433
- @closedir( $content_plugins_dir );
434
-
435
- if ( $content_plugins_dir && ! empty( $content_plugin_files ) ) {
436
- foreach ( $content_plugin_files as $content_plugin_file ) {
437
- if ( is_readable( "$content_plugins_root/$content_plugin_file" ) ) {
438
- unset( $data );
439
- $data = $this->get_id_plugin( "$content_plugins_root/$content_plugin_file" );
440
-
441
- if ( isset( $data['id'] ) && ! empty( $data['id'] ) ) {
442
- $local_projects[ $data['id'] ]['type'] = 'drop-in';
443
- $local_projects[ $data['id'] ]['version'] = $data['version'];
444
- $local_projects[ $data['id'] ]['filename'] = $content_plugin_file;
445
- }
446
- }
447
- }
448
- }
449
-
450
- //----------------------------------------------------------------------------------//
451
- //themes directory
452
- //----------------------------------------------------------------------------------//
453
- $themes_root = WP_CONTENT_DIR . '/themes';
454
- if ( empty( $themes_root ) ) {
455
- $themes_root = ABSPATH . 'wp-content/themes';
456
- }
457
-
458
- $themes_dir = @opendir( $themes_root );
459
- $themes_files = array();
460
- $local_themes = array();
461
- if ( $themes_dir ) {
462
- while ( ( $file = readdir( $themes_dir ) ) !== false ) {
463
- if ( substr( $file, 0, 1 ) == '.' ) {
464
- continue;
465
- }
466
- if ( is_dir( $themes_root . '/' . $file ) ) {
467
- $themes_subdir = @ opendir( $themes_root . '/' . $file );
468
- if ( $themes_subdir ) {
469
- while ( ( $subfile = readdir( $themes_subdir ) ) !== false ) {
470
- if ( substr( $subfile, 0, 1 ) == '.' ) {
471
- continue;
472
- }
473
- if ( substr( $subfile, - 4 ) == '.css' ) {
474
- $themes_files[] = "$file/$subfile";
475
- }
476
- }
477
- }
478
- } else {
479
- if ( substr( $file, - 4 ) == '.css' ) {
480
- $themes_files[] = $file;
481
- }
482
- }
483
- }
484
- }
485
- @closedir( $themes_dir );
486
- @closedir( $themes_subdir );
487
-
488
- if ( $themes_dir && ! empty( $themes_files ) ) {
489
- foreach ( $themes_files as $themes_file ) {
490
-
491
- //skip child themes
492
- if ( strpos( $themes_file, '-child' ) !== false ) {
493
- continue;
494
- }
495
-
496
- if ( is_readable( "$themes_root/$themes_file" ) ) {
497
-
498
- unset( $data );
499
- $data = $this->get_id_plugin( "$themes_root/$themes_file" );
500
-
501
- if ( isset( $data['id'] ) && ! empty( $data['id'] ) ) {
502
- $local_projects[ $data['id'] ]['type'] = 'theme';
503
- $local_projects[ $data['id'] ]['filename'] = substr( $themes_file, 0, strpos( $themes_file, '/' ) );
504
-
505
- //keep record of all themes for 133 themepack
506
- if ( $data['id'] == $this->theme_pack ) {
507
- $local_themes[ $themes_file ]['id'] = $data['id'];
508
- $local_themes[ $themes_file ]['filename'] = substr( $themes_file, 0, strpos( $themes_file, '/' ) );
509
- $local_themes[ $themes_file ]['version'] = $data['version'];
510
- //increment 133 theme pack version to lowest in all of them
511
- if ( isset( $local_projects[ $data['id'] ]['version'] ) && version_compare( $data['version'], $local_projects[ $data['id'] ]['version'], '<' ) ) {
512
- $local_projects[ $data['id'] ]['version'] = $data['version'];
513
- } else if ( ! isset( $local_projects[ $data['id'] ]['version'] ) ) {
514
- $local_projects[ $data['id'] ]['version'] = $data['version'];
515
- }
516
- } else {
517
- $local_projects[ $data['id'] ]['version'] = $data['version'];
518
- }
519
- }
520
- }
521
- }
522
- }
523
- update_site_option( 'wdp_un_local_themes', $local_themes );
524
-
525
- update_site_option( 'wdp_un_local_projects', $local_projects );
526
-
527
- //now check the API
528
-
529
- $projects = array();
530
- $theme = wp_get_theme();
531
- $ms_allowed = $theme->get_allowed();
532
- foreach ( $local_projects as $pid => $item ) {
533
- if ( ! empty( $blog_projects[ $pid ] ) ) { //not yet implemented
534
- // This project is activated on a blog!
535
- $active = true;
536
- } else {
537
- if ( is_multisite() ) {
538
- if ( 'theme' == $item['type'] ) {
539
- // If the theme is available on main site it's "active".
540
- $slug = $item['filename'];
541
- $active = ! empty( $ms_allowed[ $slug ] );
542
- } else {
543
- $active = is_plugin_active_for_network( $item['filename'] );
544
- }
545
- } else {
546
- if ( 'theme' == $item['type'] ) {
547
- $slug = $item['filename'];
548
- $active = ( $theme->stylesheet == $slug || $theme->template == $slug );
549
- } else {
550
- $active = is_plugin_active( $item['filename'] );
551
- }
552
- }
553
- }
554
- $extra = '';
555
-
556
- /**
557
- * Collect extra data from individual plugins.
558
- *
559
- * @since 4.0.0
560
- * @api wpmudev_api_project_extra_data-$pid
561
- *
562
- * @param string $extra Default extra data is an empty string.
563
- */
564
- $extra = apply_filters( "wpmudev_api_project_extra_data-$pid", $extra );
565
- $extra = apply_filters( 'wpmudev_api_project_extra_data', $extra, $pid );
566
-
567
- $projects[ $pid ] = array(
568
- 'version' => $item['version'],
569
- 'active' => $active ? true : false,
570
- 'extra' => $extra,
571
- );
572
- }
573
-
574
- //get WP/BP version string to help with support
575
- $wp_ver = is_multisite() ? "WordPress Multisite $wp_version" : "WordPress $wp_version";
576
- if ( defined( 'BP_VERSION' ) ) {
577
- $wp_ver .= ', BuddyPress ' . BP_VERSION;
578
- }
579
-
580
- //add blog count if multisite
581
- $blog_count = is_multisite() ? get_blog_count() : 1;
582
-
583
- $url = $this->server_url . 'updates';
584
-
585
- $options = array(
586
- 'timeout' => 15,
587
- 'sslverify' => false, // Many hosts have no updated CA bundle.
588
- 'user-agent' => 'Dashboard Notification/' . $this->version
589
- );
590
-
591
- $options['body'] = array(
592
- 'blog_count' => $blog_count,
593
- 'wp_version' => $wp_ver,
594
- 'projects' => json_encode( $projects ),
595
- 'domain' => network_site_url(),
596
- 'admin_url' => network_admin_url(),
597
- 'home_url' => network_home_url(),
598
- );
599
-
600
- $response = wp_remote_post( $url, $options );
601
- if ( wp_remote_retrieve_response_code( $response ) == 200 ) {
602
- $data = $response['body'];
603
- if ( $data != 'error' ) {
604
- $data = json_decode( $data, true );
605
- if ( is_array( $data ) ) {
606
-
607
- //we've made it here with no errors, now check for available updates
608
- $remote_projects = isset( $data['projects'] ) ? $data['projects'] : array();
609
- $updates = array();
610
-
611
- //check for updates
612
- if ( is_array( $remote_projects ) ) {
613
- foreach ( $remote_projects as $id => $remote_project ) {
614
- if ( isset( $local_projects[ $id ] ) && is_array( $local_projects[ $id ] ) ) {
615
- //match
616
- $local_version = $local_projects[ $id ]['version'];
617
- $remote_version = $remote_project['version'];
618
-
619
- if ( version_compare( $remote_version, $local_version, '>' ) ) {
620
- //add to array
621
- $updates[ $id ] = $local_projects[ $id ];
622
- $updates[ $id ]['url'] = $remote_project['url'];
623
- $updates[ $id ]['name'] = $remote_project['name'];
624
- $updates[ $id ]['version'] = $local_version;
625
- $updates[ $id ]['new_version'] = $remote_version;
626
- $updates[ $id ]['autoupdate'] = $remote_project['autoupdate'];
627
- }
628
- }
629
- }
630
-
631
- //record results
632
- update_site_option( 'wdp_un_updates_available', $updates );
633
- } else {
634
- return false;
635
- }
636
- }
637
- }
638
- }
639
- }
640
-
641
- function filter_plugin_info( $res, $action, $args ) {
642
- global $wp_version;
643
- $cur_wp_version = preg_replace( '/-.*$/', '', $wp_version );
644
-
645
- if ( ( $action == 'plugin_information' || $action == 'theme_information' ) && strpos( $args->slug, 'wpmudev_install' ) !== false ) {
646
- $string = explode( '-', $args->slug );
647
- $id = intval( $string[1] );
648
- $updates = get_site_option( 'wdp_un_updates_available' );
649
- //if in details iframe on update core page short-curcuit it
650
- if ( did_action( 'install_plugins_pre_plugin-information' ) && is_array( $updates ) && isset( $updates[ $id ] ) ) {
651
- $this->popup_changelog( $id );
652
- }
653
-
654
- $res = new stdClass;
655
- $res->name = $updates[ $id ]['name'];
656
- $res->slug = sanitize_title( $updates[ $id ]['name'] );
657
- $res->version = $updates[ $id ]['version'];
658
- $res->rating = 100;
659
- $res->homepage = $updates[ $id ]['url'];
660
- $res->download_link = '';
661
- $res->tested = $cur_wp_version;
662
-
663
- return $res;
664
- }
665
-
666
- if ( $action == 'plugin_information' && strpos( $args->slug, 'install_wpmudev_dash' ) !== false ) {
667
- $res = new stdClass;
668
- $res->name = 'WPMU DEV Dashboard';
669
- $res->slug = 'wpmu-dev-dashboard';
670
- $res->version = '';
671
- $res->rating = 100;
672
- $res->homepage = 'https://premium.wpmudev.org/project/wpmu-dev-dashboard/';
673
- $res->download_link = $this->server_url . "download-dashboard";
674
- $res->tested = $cur_wp_version;
675
-
676
- return $res;
677
- }
678
-
679
- return $res;
680
- }
681
-
682
- function filter_plugin_rows() {
683
- if ( ! current_user_can( 'update_plugins' ) ) {
684
- return;
685
- }
686
-
687
- //don't show on per site plugins list, just like core
688
- if ( is_multisite() && ! is_network_admin() ) { return; }
689
-
690
- $updates = get_site_option( 'wdp_un_updates_available' );
691
- if ( is_array( $updates ) && count( $updates ) ) {
692
- foreach ( $updates as $id => $plugin ) {
693
- if ( $plugin['autoupdate'] != '2' ) {
694
- if ( $plugin['type'] == 'theme' ) {
695
- remove_all_actions( 'after_theme_row_' . $plugin['filename'] );
696
- add_action( 'after_theme_row_' . $plugin['filename'], array( &$this, 'plugin_row' ), 99, 2 );
697
- } else {
698
- remove_all_actions( 'after_plugin_row_' . $plugin['filename'] );
699
- add_action( 'after_plugin_row_' . $plugin['filename'], array(
700
- &$this,
701
- 'plugin_row'
702
- ), 99, 2 );
703
- }
704
- }
705
- }
706
- }
707
-
708
- $local_themes = get_site_option( 'wdp_un_local_themes' );
709
- if ( is_array( $local_themes ) && count( $local_themes ) ) {
710
- foreach ( $local_themes as $id => $plugin ) {
711
- remove_all_actions( 'after_theme_row_' . $plugin['filename'] );
712
- //only add the notice if specific version is wrong
713
- if ( isset( $updates[ $this->theme_pack ] ) && version_compare( $plugin['version'], $updates[ $this->theme_pack ]['new_version'], '<' ) ) {
714
- add_action( 'after_theme_row_' . $plugin['filename'], array( &$this, 'themepack_row' ), 9, 2 );
715
- }
716
- }
717
- }
718
- }
719
-
720
- function filter_plugin_count( $value ) {
721
- global $wp_version;
722
- $cur_wp_version = preg_replace( '/-.*$/', '', $wp_version );
723
-
724
- //remove any conflicting slug local WPMU DEV plugins from WP update notifications
725
- $local_projects = get_site_option( 'wdp_un_local_projects' );
726
- if ( is_array( $local_projects ) && count( $local_projects ) ) {
727
- foreach ( $local_projects as $id => $plugin ) {
728
- if ( isset( $value->response[ $plugin['filename'] ] ) ) {
729
- unset( $value->response[ $plugin['filename'] ] );
730
- }
731
- }
732
- }
733
-
734
- $updates = get_site_option( 'wdp_un_updates_available' );
735
- if ( is_array( $updates ) && count( $updates ) ) {
736
- foreach ( $updates as $id => $plugin ) {
737
- if ( $plugin['type'] != 'theme' && $plugin['autoupdate'] != '2' ) {
738
-
739
- //build plugin class
740
- $object = new stdClass;
741
- $object->url = $plugin['url'];
742
- $object->slug = "wpmudev_install-$id";
743
- $object->new_version = $plugin['new_version'];
744
- $object->package = '';
745
- $object->tested = $cur_wp_version;
746
-
747
- //add to class
748
- $value->response[ $plugin['filename'] ] = $object;
749
- }
750
- }
751
- }
752
-
753
- return $value;
754
- }
755
-
756
- function filter_theme_count( $value ) {
757
-
758
- $updates = get_site_option( 'wdp_un_updates_available' );
759
- if ( is_array( $updates ) && count( $updates ) ) {
760
- foreach ( $updates as $id => $theme ) {
761
- if ( $theme['type'] == 'theme' && $theme['autoupdate'] != '2' ) {
762
-
763
- $theme_slug = $theme['filename'];
764
-
765
- //build theme listing
766
- $value->response[ $theme_slug ]['theme'] = $theme['filename'];
767
- $value->response[ $theme_slug ]['url'] = admin_url( 'admin-ajax.php?action=wdpun-changelog&pid=' . $id );
768
- $value->response[ $theme_slug ]['new_version'] = $theme['new_version'];
769
- $value->response[ $theme_slug ]['package'] = '';
770
- }
771
- }
772
- }
773
-
774
- //filter 133 theme pack themes from the list unless update is available
775
- $local_themes = get_site_option( 'wdp_un_local_themes' );
776
- if ( is_array( $local_themes ) && count( $local_themes ) ) {
777
- foreach ( $local_themes as $id => $theme ) {
778
- $theme_slug = $theme['filename'];
779
-
780
- //add to count only if new version exists, otherwise remove
781
- if ( isset( $updates[ $theme['id'] ] ) && isset( $updates[ $theme['id'] ]['new_version'] ) && version_compare( $theme['version'], $updates[ $theme['id'] ]['new_version'], '<' ) ) {
782
- $value->response[ $theme_slug ]['new_version'] = $updates[ $theme['id'] ]['new_version'];
783
- $value->response[ $theme_slug ]['package'] = '';
784
- } else if ( isset( $value ) && isset( $value->response ) && isset( $theme_slug ) && isset( $value->response[ $theme_slug ] ) ) {
785
- unset( $value->response[ $theme_slug ] );
786
- }
787
- }
788
- }
789
-
790
- return $value;
791
- }
792
-
793
- function plugin_row( $file, $plugin_data ) {
794
- //get new version and update url
795
- $updates = get_site_option( 'wdp_un_updates_available' );
796
- if ( is_array( $updates ) && count( $updates ) ) {
797
- foreach ( $updates as $id => $plugin ) {
798
- if ( $plugin['filename'] == $file ) {
799
- $project_id = $id;
800
- $version = $plugin['new_version'];
801
- $plugin_url = $plugin['url'];
802
- $autoupdate = $plugin['autoupdate'];
803
- $filename = $plugin['filename'];
804
- $type = $plugin['type'];
805
- break;
806
- }
807
- }
808
- } else {
809
- return false;
810
- }
811
-
812
- $plugins_allowedtags = array(
813
- 'a' => array( 'href' => array(), 'title' => array() ),
814
- 'abbr' => array( 'title' => array() ),
815
- 'acronym' => array( 'title' => array() ),
816
- 'code' => array(),
817
- 'em' => array(),
818
- 'strong' => array()
819
- );
820
- $plugin_name = wp_kses( $plugin_data['Name'], $plugins_allowedtags );
821
-
822
- $info_url = admin_url( 'admin-ajax.php?action=wdpun-changelog&pid=' . $project_id . '&TB_iframe=true&width=640&height=800' );
823
- if ( file_exists( WP_PLUGIN_DIR . '/wpmudev-updates/update-notifications.php' ) ) {
824
- $message = "Activate WPMU DEV Dashboard";
825
- $action_url = $this->activate_url();
826
- } else { //dashboard not installed at all
827
- $message = "Install WPMU DEV Dashboard";
828
- $action_url = $this->auto_install_url();
829
- }
830
-
831
- if ( current_user_can( 'update_plugins' ) ) {
832
- echo '<tr class="plugin-update-tr"><td colspan="3" class="plugin-update colspanchange"><div class="update-message notice inline notice-warning notice-alt"><p>';
833
- printf( 'There is a new version of %1$s available on WPMU DEV. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s details</a> or <a href="%5$s">%6$s</a> to update.', $plugin_name, esc_url( $info_url ), esc_attr( $plugin_name ), $version, esc_url( $action_url ), $message );
834
- echo '</p></div></td></tr>';
835
- }
836
- }
837
-
838
- function themepack_row( $file, $plugin_data ) {
839
-
840
- //get new version and update url
841
- $updates = get_site_option( 'wdp_un_updates_available' );
842
- if ( isset( $updates[ $this->theme_pack ] ) ) {
843
- $plugin = $updates[ $this->theme_pack ];
844
- $project_id = $this->theme_pack;
845
- $version = $plugin['new_version'];
846
- $plugin_url = $plugin['url'];
847
- } else {
848
- return false;
849
- }
850
-
851
- $plugins_allowedtags = array(
852
- 'a' => array( 'href' => array(), 'title' => array() ),
853
- 'abbr' => array( 'title' => array() ),
854
- 'acronym' => array( 'title' => array() ),
855
- 'code' => array(),
856
- 'em' => array(),
857
- 'strong' => array()
858
- );
859
- $plugin_name = wp_kses( $plugin_data['Name'], $plugins_allowedtags );
860
-
861
- $info_url = admin_url( 'admin_ajax.php?action=wdpun-changelog&pid=' . $project_id . '&TB_iframe=true&width=640&height=800' );
862
- if ( file_exists( WP_PLUGIN_DIR . '/wpmudev-updates/update-notifications.php' ) ) {
863
- $message = "Activate WPMU DEV Dashboard";
864
- $action_url = $this->activate_url();
865
- } else { //dashboard not installed at all
866
- $message = "Install WPMU DEV Dashboard";
867
- $action_url = $this->auto_install_url();
868
- }
869
-
870
- if ( current_user_can( 'update_themes' ) ) {
871
- echo '<tr class="plugin-update-tr"><td colspan="3" class="plugin-update colspanchange"><div class="update-message notice inline notice-warning notice-alt"><p>';
872
- printf( 'There is a new version of %1$s available on WPMU DEV. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s details</a> or <a href="%5$s">%6$s</a> to update.', $plugin_name, esc_url( $info_url ), esc_attr( $plugin_name ), $version, esc_url( $action_url ), $message );
873
- echo '</p></div></td></tr>';
874
- }
875
- }
876
-
877
- function disable_checkboxes() {
878
-
879
- $updates = get_site_option( 'wdp_un_updates_available' );
880
- if ( ! is_array( $updates ) || ( is_array( $updates ) && ! count( $updates ) ) ) {
881
- return;
882
- }
883
-
884
- $jquery = "<script type='text/javascript'>";
885
-
886
- if ( file_exists( WP_PLUGIN_DIR . '/wpmudev-updates/update-notifications.php' ) ) {
887
- $message = "Activate WPMU DEV Dashboard";
888
- $action_url = $this->activate_url();
889
- } else { //dashboard not installed at all
890
- $message = "Install WPMU DEV Dashboard";
891
- $action_url = $this->auto_install_url();
892
- }
893
- $jquery .= "var wdp_note = '<br><span class=\"notice inline notice-warning notice-alt\">" . sprintf( '<a href="%s">%s</a> to update.', esc_url( $action_url ), $message ) . "</span>';\n";
894
-
895
- foreach ( (array) $updates as $id => $project ) {
896
- $slug = $project['filename'];
897
- $jquery .= "jQuery(\"input:checkbox[value='" . esc_attr( $slug ) . "']\").closest('tr').find('td p').last().append(wdp_note);\n";
898
- $jquery .= "jQuery(\"input:checkbox[value='" . esc_attr( $slug ) . "']\").remove();\n";
899
- }
900
-
901
- //disable checkboxes for 133 theme pack themes
902
- $local_themes = get_site_option( 'wdp_un_local_themes' );
903
- if ( is_array( $local_themes ) && count( $local_themes ) ) {
904
- foreach ( $local_themes as $id => $theme ) {
905
- $jquery .= "jQuery(\"input:checkbox[value='" . esc_attr( $theme['filename'] ) . "']\").closest('tr').find('td p').last().append(wdp_note);\n";
906
- $jquery .= "jQuery(\"input:checkbox[value='" . esc_attr( $theme['filename'] ) . "']\").remove();\n";
907
- }
908
- }
909
-
910
- $jquery .= "</script>\n";
911
-
912
- echo $jquery;
913
- }
914
-
915
- function set_activate_flag( $plugin ) {
916
- $data = $this->get_id_plugin( WP_PLUGIN_DIR . '/' . $plugin );
917
- if ( isset( $data['id'] ) && ! empty( $data['id'] ) ) {
918
- update_site_option( 'wdp_un_activated_flag', 1 );
919
- }
920
- }
921
-
922
- function popup_changelog( $project_id ) {
923
- /**
924
- * Dashboard popup template: Project changelog
925
- *
926
- * Displays the changelog of a specific project.
927
- *
928
- * Following variables are passed into the template:
929
- * $pid (project ID)
930
- *
931
- * @since 4.0.5
932
- * @package WPMUDEV_Dashboard
933
- */
934
-
935
- $url = $this->server_url . 'changelog/' . $project_id;
936
-
937
- $options = array(
938
- 'timeout' => 15,
939
- 'sslverify' => false, // Many hosts have no updated CA bundle.
940
- 'user-agent' => 'Dashboard Notification/' . $this->version
941
- );
942
-
943
- $response = wp_remote_get( $url, $options );
944
- if ( wp_remote_retrieve_response_code( $response ) == 200 ) {
945
- $changelog = json_decode( wp_remote_retrieve_body( $response ), true );
946
- }
947
-
948
- $updates = get_site_option( 'wdp_un_updates_available' );
949
- $item = $updates[ $project_id ];
950
-
951
- if ( ! $changelog || ! is_array( $changelog ) || ! $item ) {
952
- wp_die( __( 'We did not find any data for this plugin or theme...', 'wpmudev' ) );
953
- }
954
- $dlg_id = 'dlg-' . md5( time() . '-' . $project_id );
955
-
956
-
957
- ?>
958
- <div id="content" class="<?php echo esc_attr( $dlg_id ); ?>">
959
- <script src="<?php echo includes_url( '/wp-includes/js/jquery/jquery.js' ); ?>"></script>
960
- <link rel="stylesheet"
961
- href="https://fonts.googleapis.com/css?family=Roboto+Condensed%3A400%2C700%7CRoboto%3A400%2C500%2C300%2C300italic%2C100"
962
- type="text/css" media="all"/>
963
- <style>
964
- * {
965
- box-sizing: border-box;
966
- -moz-box-sizing: border-box;
967
- }
968
-
969
- html, body {
970
- margin: 0;
971
- padding: 0;
972
- height: 100%;
973
- font-family: 'Roboto', 'Helvetica Neue', Helvetica, sans-serif;
974
- font-size: 15px;
975
- }
976
-
977
- h1, h2, h3, h4 {
978
- font-family: 'Roboto Condensed', 'Roboto', 'Helvetica Neue', Helvetica, sans-serif;
979
- font-weight: 700;
980
- color: #777771;
981
- }
982
-
983
- h1 {
984
- font-size: 3em;
985
- }
986
-
987
- p {
988
- font-size: 1.2em;
989
- font-weight: 300;
990
- color: #777771;
991
- }
992
-
993
- a {
994
- color: #19b4cf;
995
- text-decoration: none;
996
- }
997
-
998
- a:hover,
999
- a:focus,
1000
- a:active {
1001
- color: #387ac1;
1002
- }
1003
-
1004
- #content {
1005
- min-height: 100%;
1006
- text-align: center;
1007
- background: #FFF;
1008
- position: absolute;
1009
- left: 0;
1010
- top: 0;
1011
- right: 0;
1012
- bottom: 0;
1013
- overflow: auto;
1014
- }
1015
-
1016
- #content .excerpt {
1017
- width: 100%;
1018
- background-color: #14485F;
1019
- padding: 10px;
1020
- color: #FFF;
1021
- }
1022
-
1023
- #content .excerpt h1 {
1024
- margin: 30px;
1025
- color: #FFF;
1026
- font-weight: 100;
1027
- }
1028
-
1029
- #content .versions h4 {
1030
- font-size: 15px;
1031
- text-transform: uppercase;
1032
- text-align: left;
1033
- padding: 0 0 15px;
1034
- font-weight: bold;
1035
- line-height: 20px;
1036
- }
1037
-
1038
- #content .excerpt a {
1039
- float: left;
1040
- margin-right: 40px;
1041
- text-decoration: none;
1042
- color: #6ECEDE;
1043
- }
1044
-
1045
- #content .excerpt a:hover,
1046
- #content .excerpt a:focus,
1047
- #content .excerpt a:active {
1048
- color: #C7F7FF;
1049
- }
1050
-
1051
- #content .footer {
1052
- background-color: #0B2F3F;
1053
- padding: 20px 0;
1054
- margin: 0;
1055
- position: relative;
1056
- }
1057
-
1058
- #content .footer p {
1059
- color: #FFF;
1060
- margin: 10px 0;
1061
- padding: 0;
1062
- font-size: 15px;
1063
- }
1064
-
1065
- #content .information {
1066
- padding: 0;
1067
- text-align: left;
1068
- }
1069
-
1070
- #content .versions > li {
1071
- border-bottom: 1px solid #E5E5E5;
1072
- padding: 40px;
1073
- margin: 0;
1074
- }
1075
-
1076
- #content .versions > li.new {
1077
- background: #fffff6;
1078
- }
1079
-
1080
- #content .information .current-version,
1081
- #content .information .new-version {
1082
- border-radius: 5px;
1083
- color: #FFF;
1084
- cursor: default;
1085
- display: inline-block;
1086
- position: relative;
1087
- top: -2px;
1088
- margin: 0 0 0 10px;
1089
- padding: 1px 5px;
1090
- font-size: 10px;
1091
- line-height: 20px;
1092
- height: 20px;
1093
- box-sizing: border-box;
1094
- }
1095
-
1096
- #content .information .new-version {
1097
- background: #FDCE43;
1098
- text-shadow: 0 1px 1px #DDAE30;
1099
- }
1100
-
1101
- #content .current-version {
1102
- background: #00ACCA;
1103
- text-shadow: 0 1px 1px #008CAA;
1104
- }
1105
-
1106
- #content .versions {
1107
- margin: 0;
1108
- padding: 0;
1109
- }
1110
-
1111
- #content .versions .changes {
1112
- list-style: disc;
1113
- padding: 0 0 0 20px;
1114
- margin: 0;
1115
- }
1116
-
1117
- #content .versions .changes li {
1118
- padding: 3px 0 3px 20px;
1119
- margin: 0;
1120
- color: #777771;
1121
- cursor: default;
1122
- }
1123
-
1124
- #content .version-meta {
1125
- float: right;
1126
- text-align: right;
1127
- }
1128
- </style>
1129
-
1130
- <div class="excerpt">
1131
- <h1><?php printf( esc_attr__( '%s changelog', 'wpmudev' ), esc_html( $item['name'] ) ); ?></h1>
1132
- </div>
1133
-
1134
- <div class="information">
1135
-
1136
- <ul class="versions">
1137
- <?php
1138
- foreach ( $changelog as $log ) {
1139
- $row_class = '';
1140
- $badge = '';
1141
-
1142
- if ( ! is_array( $log ) ) {
1143
- continue;
1144
- }
1145
- if ( empty( $log ) ) {
1146
- continue;
1147
- }
1148
-
1149
- // -1 .. local is higher (dev) | 0 .. equal | 1 .. new version available
1150
- $version_check = version_compare( $log['version'], $item['version'] );
1151
-
1152
- if ( $item['version'] && 1 === $version_check ) {
1153
- $row_class = 'new';
1154
- }
1155
-
1156
- if ( $item['version'] ) {
1157
- if ( 0 === $version_check ) {
1158
- $badge = sprintf(
1159
- '<div class="current-version">%s %s</div>',
1160
- '<i class="wdv-icon wdv-icon-ok"></i>',
1161
- __( 'Current', 'wpmudev' )
1162
- );
1163
- } elseif ( 1 === $version_check ) {
1164
- $badge = sprintf(
1165
- '<div class="new-version">%s %s</div>',
1166
- '<i class="wdv-icon wdv-icon-star"></i>',
1167
- __( 'New', 'wpmudev' )
1168
- );
1169
- }
1170
- }
1171
-
1172
- $version = $log['version'];
1173
-
1174
- if ( empty( $log['time'] ) ) {
1175
- $rel_date = '';
1176
- } else {
1177
- $rel_date = date_i18n( get_option( 'date_format' ), $log['time'] );
1178
- }
1179
-
1180
- printf(
1181
- '<li class="%1$s"><h4>%2$s %3$s <small class="version-meta">%4$s</small></h4>',
1182
- esc_attr( $row_class ),
1183
- sprintf(
1184
- esc_html__( 'Version %s', 'wpmudev' ), esc_html( $version )
1185
- ),
1186
- wp_kses_post( $badge ),
1187
- esc_html( $rel_date )
1188
- );
1189
-
1190
- $notes = explode( "\n", $log['log'] );
1191
- $detail_level = 0;
1192
- $detail_class = 'intro';
1193
-
1194
- echo '<ul class="changes">';
1195
- foreach ( $notes as $note ) {
1196
- if ( 0 === strpos( $note, '<p>' ) ) {
1197
- if ( 1 == $detail_level ) {
1198
- printf(
1199
- '<li class="toggle-details">
1200
- <a href="#" class="for-intro">%s</a><a href="#" class="for-detail">%s</a>
1201
- </li>',
1202
- esc_html__( 'Show all changes', 'wpmudev' ),
1203
- esc_html__( 'Hide details', 'wpmudev' )
1204
- );
1205
- $detail_class = 'detail';
1206
- }
1207
- $detail_level += 1;
1208
- }
1209
-
1210
- $note = stripslashes( $note );
1211
- $note = preg_replace( '/(<br ?\/?>|<p>|<\/p>)/', '', $note );
1212
- $note = trim( preg_replace( '/^\s*(\*|\-)\s*/', '', $note ) );
1213
- $note = str_replace( array( '<', '>' ), array( '&lt;', '&gt;' ), $note );
1214
- $note = preg_replace( '/`(.*?)`/', '<code>\1</code>', $note );
1215
- if ( empty( $note ) ) {
1216
- continue;
1217
- }
1218
-
1219
- printf(
1220
- '<li class="version-%s">%s</li>',
1221
- esc_attr( $detail_class ),
1222
- wp_kses_post( $note )
1223
- );
1224
- }
1225
- echo '</ul></li>';
1226
- }
1227
- ?>
1228
- </ul>
1229
- </div>
1230
-
1231
- <div class="footer">
1232
- <p>Copyright 2009 - <?php echo esc_html( date( 'Y' ) ); ?> WPMU DEV</p>
1233
- </div>
1234
-
1235
- <style>
1236
- .<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes .for-detail,
1237
- .<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes .version-detail {
1238
- display: none;
1239
- }
1240
-
1241
- .<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes .for-intro {
1242
- display: inline-block;
1243
- }
1244
-
1245
- .<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes.show-details .for-intro {
1246
- display: none;
1247
- }
1248
-
1249
- .<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes.show-details .for-detail {
1250
- display: inline-block;
1251
- }
1252
-
1253
- .<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes.show-details .version-detail {
1254
- display: list-item;
1255
- }
1256
-
1257
- .<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes .toggle-details {
1258
- padding: 8px 0 4px;
1259
- text-align: right;
1260
- font-size: 12px;
1261
- list-style: none;
1262
- }
1263
- </style>
1264
- <script>
1265
- jQuery(function () {
1266
- jQuery('.<?php echo esc_attr( $dlg_id ); ?>').on('click', '.toggle-details a', function (ev) {
1267
- var li = jQuery(this),
1268
- ver = li.closest('.changes');
1269
-
1270
- ev.preventDefault();
1271
- ev.stopPropagation();
1272
- ver.toggleClass('show-details');
1273
- return false;
1274
- });
1275
- });
1276
- </script>
1277
- </div>
1278
- <?php
1279
- exit; //this is for output, we are done after this.
1280
- }
1281
-
1282
- function popup_changelog_ajax() {
1283
- $project_id = $_GET['pid'];
1284
- $this->popup_changelog( $project_id );
1285
- }
1286
-
1287
- function dismiss_ajax() {
1288
- update_site_option( 'wdp_un_dismissed', time() );
1289
- wp_send_json_success();
1290
- }
1291
-
1292
- }
1293
-
1294
- $GLOBALS['WPMUDEV_Dashboard_Notice4'] = new WPMUDEV_Dashboard_Notice4();
1295
- }
1296
-
1297
- //disable older versions
1298
- if ( ! class_exists( 'WPMUDEV_Dashboard_Notice' ) ) {
1299
- class WPMUDEV_Dashboard_Notice {
1300
- }
1301
- }
1302
-
1303
- if ( ! class_exists( 'WPMUDEV_Dashboard_Notice3' ) ) {
1304
- class WPMUDEV_Dashboard_Notice3 {
1305
- }
1306
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/wp-smushit.pot CHANGED
@@ -1,9 +1,9 @@
1
  #, fuzzy
2
  msgid ""
3
  msgstr ""
4
- "Project-Id-Version: WP Smush\n"
5
- "POT-Creation-Date: 2018-05-24 11:13+0530\n"
6
- "PO-Revision-Date: 2018-05-24 11:12+0530\n"
7
  "Last-Translator: Umesh <umeshsingla05@gmail.com>\n"
8
  "Language-Team: Umesh <umeshsingla05@gmail.com>\n"
9
  "MIME-Version: 1.0\n"
@@ -32,11 +32,11 @@ msgid "Oops, we could not do this..."
32
  msgstr ""
33
 
34
  #: assets/shared-ui/plugin-ui.php:272 extras/free-dashboard/module.php:395
35
- #: extras/free-dashboard/module.php:434 lib/class-wp-smush-ui.php:1007
36
  msgid "Saving"
37
  msgstr ""
38
 
39
- #: assets/shared-ui/plugin-ui.php:301 lib/class-wp-smush-ui.php:1007
40
  msgid "Dismiss"
41
  msgstr ""
42
 
@@ -157,10 +157,10 @@ msgstr ""
157
 
158
  #: lib/class-wp-smush-admin.php:261
159
  msgid ""
160
- "Set a maximum height and width for all images uploaded to your site so that "
161
- "any unnecessarily large images are automatically resized before they are "
162
- "added to the media gallery. This setting does not apply to images smushed "
163
- "using Directory Smush feature."
164
  msgstr ""
165
 
166
  #: lib/class-wp-smush-admin.php:264
@@ -188,109 +188,123 @@ msgid ""
188
  "JPEG will further reduce its size."
189
  msgstr ""
190
 
191
- #: lib/class-wp-smush-admin.php:395 lib/class-wp-smush.php:1091
192
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:159
193
- #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:274
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  msgid "Super-Smush"
195
  msgstr ""
196
 
197
- #: lib/class-wp-smush-admin.php:396
198
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:160
199
  msgid "Smush Now"
200
  msgstr ""
201
 
202
- #: lib/class-wp-smush-admin.php:397
203
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:161
204
  msgid "{{errors}} image(s) were skipped due to an error."
205
  msgstr ""
206
 
207
- #: lib/class-wp-smush-admin.php:398
208
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:162
209
  msgid "All images are fully optimized."
210
  msgstr ""
211
 
212
- #: lib/class-wp-smush-admin.php:399
213
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:163
214
  msgid "Restoring image.."
215
  msgstr ""
216
 
217
- #: lib/class-wp-smush-admin.php:400
218
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:164
219
  msgid "Smushing image.."
220
  msgstr ""
221
 
222
- #: lib/class-wp-smush-admin.php:401
223
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:165
224
  msgid "Checking images.."
225
  msgstr ""
226
 
227
- #: lib/class-wp-smush-admin.php:402
228
  msgid ""
229
  "We successfully verified your membership, all the Pro features should work "
230
  "completely. "
231
  msgstr ""
232
 
233
- #: lib/class-wp-smush-admin.php:403
234
  msgid "Your membership couldn't be verified."
235
  msgstr ""
236
 
237
- #: lib/class-wp-smush-admin.php:404
238
  msgid "Missing file path."
239
  msgstr ""
240
 
241
- #: lib/class-wp-smush-admin.php:406
242
  msgid "image could not be smushed."
243
  msgstr ""
244
 
245
- #: lib/class-wp-smush-admin.php:407
246
  msgid "images could not be smushed."
247
  msgstr ""
248
 
249
- #: lib/class-wp-smush-admin.php:408 lib/class-wp-smush.php:1006
250
- #: lib/class-wp-smush.php:1013
251
- #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:193
252
- #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:196
253
  msgid "Already Optimized"
254
  msgstr ""
255
 
256
- #: lib/class-wp-smush-admin.php:409
257
  msgid "Ajax Error"
258
  msgstr ""
259
 
260
- #: lib/class-wp-smush-admin.php:410
261
  msgid "All Done!"
262
  msgstr ""
263
 
264
- #: lib/class-wp-smush-admin.php:411 lib/class-wp-smush-ui.php:72
265
  msgid "QUICK SETUP"
266
  msgstr ""
267
 
268
- #: lib/class-wp-smush-admin.php:411 lib/class-wp-smush-ui.php:878
269
  msgid "Skip"
270
  msgstr ""
271
 
272
- #: lib/class-wp-smush-admin.php:412
273
  msgid "Give us a moment while we sync the stats."
274
  msgstr ""
275
 
276
- #: lib/class-wp-smush-admin.php:587
277
  #, php-format
278
  msgid "%s%d%s Attachment(s) could not be smushed, as no ID was received."
279
  msgstr ""
280
 
281
- #: lib/class-wp-smush-admin.php:603
282
  #, php-format
283
  msgid ""
284
  "You've exceeded Bulk Smush limit of %d images at once for standard users. "
285
  "Click on Bulk Smush to continue."
286
  msgstr ""
287
 
288
- #: lib/class-wp-smush-admin.php:627
289
  #, php-format
290
  msgid "%s%d%s Attachment(s) were skipped."
291
  msgstr ""
292
 
293
- #: lib/class-wp-smush-admin.php:700
294
  #, php-format
295
  msgid ""
296
  "%s%d%s Attachment(s) were not smushed due to a timeout error, You can "
@@ -298,101 +312,92 @@ msgid ""
298
  "larger files. `define('WP_SMUSH_API_TIMEOUT', 150);`"
299
  msgstr ""
300
 
301
- #: lib/class-wp-smush-admin.php:759 lib/class-wp-smush-nextgen.php:443
302
  msgid "You don't have permission to work with uploaded files."
303
  msgstr ""
304
 
305
- #: lib/class-wp-smush-admin.php:763 lib/class-wp-smush-nextgen.php:447
306
  msgid "No attachment ID was provided."
307
  msgstr ""
308
 
309
- #: lib/class-wp-smush-admin.php:775
310
  msgid "Attachment Skipped - Check `wp_smush_image` filter."
311
  msgstr ""
312
 
313
- #: lib/class-wp-smush-admin.php:965
314
  #, php-format
315
  msgid "<strong>%d of %d images</strong> were sent for smushing:"
316
  msgstr ""
317
 
318
- #: lib/class-wp-smush-admin.php:1154 lib/class-wp-smush.php:1097
319
  msgid "Smushing in progress.."
320
  msgstr ""
321
 
322
- #: lib/class-wp-smush-admin.php:1160 lib/class-wp-smush.php:1116
323
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:269
324
  msgid "Smush Now!"
325
  msgstr ""
326
 
327
- #: lib/class-wp-smush-admin.php:1181
328
  msgid "Settings"
329
  msgstr ""
330
 
331
- #: lib/class-wp-smush-admin.php:1344
332
  msgid "Image not smushed, fields empty."
333
  msgstr ""
334
 
335
- #: lib/class-wp-smush-admin.php:1351 lib/class-wp-smush-nextgen.php:631
336
  msgid ""
337
  "Image couldn't be smushed as the nonce verification failed, try reloading "
338
  "the page."
339
  msgstr ""
340
 
341
- #: lib/class-wp-smush-admin.php:1393
342
  msgid ""
343
  "We haven’t found any images in your media library yet so there’s no smushing "
344
  "to be done! Once you upload images, reload this page and start playing!"
345
  msgstr ""
346
 
347
- #: lib/class-wp-smush-admin.php:1408
348
  msgid "Yay! All images are optimized as per your current settings."
349
  msgstr ""
350
 
351
- #: lib/class-wp-smush-admin.php:1611 lib/class-wp-smush-ui.php:905
352
  #, php-format
353
  msgid "You have images that need smushing. %sBulk smush now!%s"
354
  msgstr ""
355
 
356
- #: lib/class-wp-smush-admin.php:1999
357
  msgid "Review your setting now."
358
  msgstr ""
359
 
360
- #: lib/class-wp-smush-admin.php:2000 lib/class-wp-smush-dir.php:274
361
- #: lib/class-wp-smush-ui.php:792 lib/class-wp-smush-ui.php:931
362
- msgid "WP Smush Pro"
363
- msgstr ""
364
-
365
- #: lib/class-wp-smush-admin.php:2001
366
  msgid ""
367
- "Welcome to the newest version of WP Smush! In this update we've added the "
368
  "ability to bulk smush images in directories outside your uploads folder."
369
  msgstr ""
370
 
371
- #: lib/class-wp-smush-admin.php:2004
372
  #, php-format
373
  msgid ""
374
  " And as a multisite user, you can manage %sSmush settings%s globally across "
375
  "all sites!"
376
  msgstr ""
377
 
378
- #: lib/class-wp-smush-admin.php:2007
379
  #, php-format
380
  msgid " %sFind out more here >>%s"
381
  msgstr ""
382
 
383
- #: lib/class-wp-smush-admin.php:2251
384
- msgid "Smush Stats"
385
- msgstr ""
386
-
387
- #: lib/class-wp-smush-backup.php:148 lib/class-wp-smush-nextgen.php:530
388
  msgid "Error in processing restore action, Fields empty."
389
  msgstr ""
390
 
391
- #: lib/class-wp-smush-backup.php:155 lib/class-wp-smush-nextgen.php:538
392
  msgid "Image not restored, Nonce verification failed."
393
  msgstr ""
394
 
395
- #: lib/class-wp-smush-backup.php:282 lib/class-wp-smush-nextgen.php:613
396
  msgid "Unable to restore image"
397
  msgstr ""
398
 
@@ -400,159 +405,199 @@ msgstr ""
400
  msgid "Directory-smush savings"
401
  msgstr ""
402
 
403
- #: lib/class-wp-smush-dir.php:93
404
  msgid "Updating Stats"
405
  msgstr ""
406
 
407
- #: lib/class-wp-smush-dir.php:103
408
  msgid "Smush images that aren't located in your uploads folder."
409
  msgstr ""
410
 
411
- #: lib/class-wp-smush-dir.php:105
412
  msgid "Select a directory you'd like to Smush."
413
  msgstr ""
414
 
415
- #: lib/class-wp-smush-dir.php:105
416
  msgid "Choose directory"
417
  msgstr ""
418
 
419
- #: lib/class-wp-smush-dir.php:219
420
  msgid "RESUME LAST SCAN"
421
  msgstr ""
422
 
423
- #: lib/class-wp-smush-dir.php:250
424
  msgid "DIRECTORY SMUSH"
425
  msgstr ""
426
 
427
- #: lib/class-wp-smush-dir.php:255
428
  msgid ""
429
  "In addition to smushing your media uploads, you may want to also smush "
430
  "images living outside your uploads directory. Simply add any directories you "
431
  "wish to smush and bulk smush away!"
432
  msgstr ""
433
 
434
- #: lib/class-wp-smush-dir.php:268
435
  msgid ""
436
  "All images for the selected directory are smushed and up to date. Awesome!"
437
  msgstr ""
438
 
439
- #: lib/class-wp-smush-dir.php:271
440
  #, php-format
441
  msgid ""
442
  "%s/%s image(s) were successfully smushed, however %s image(s) could not be "
443
  "smushed due to an error."
444
  msgstr ""
445
 
446
- #: lib/class-wp-smush-dir.php:274
447
  #, php-format
448
  msgid ""
449
  " %sUpgrade to pro%s to bulk smush all your directory images with one click. "
450
  "Free users can smush 50 images with each click."
451
  msgstr ""
452
 
453
- #: lib/class-wp-smush-dir.php:278 lib/class-wp-smush-ui.php:143
454
- #: lib/class-wp-smush-ui.php:773
455
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:404
456
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:445
457
  msgid "BULK SMUSH"
458
  msgstr ""
459
 
460
- #: lib/class-wp-smush-dir.php:280
461
  msgid "Click to stop the directory smushing process."
462
  msgstr ""
463
 
464
- #: lib/class-wp-smush-dir.php:281 lib/class-wp-smush-ui.php:840
465
  msgid "CANCEL"
466
  msgstr ""
467
 
468
- #: lib/class-wp-smush-dir.php:289
469
  msgid "CHOOSE DIRECTORY"
470
  msgstr ""
471
 
472
- #: lib/class-wp-smush-dir.php:459
473
  msgid "Exclude directory from Smush List"
474
  msgstr ""
475
 
476
- #: lib/class-wp-smush-dir.php:598
477
  msgid "We could not find any images in the selected directory."
478
  msgstr ""
479
 
480
- #: lib/class-wp-smush-dir.php:921
481
  #, php-format
482
  msgid "%d images"
483
  msgstr ""
484
 
485
- #: lib/class-wp-smush-dir.php:954
486
  msgid "Waiting.."
487
  msgstr ""
488
 
489
- #: lib/class-wp-smush-dir.php:1076
490
  msgid "Incorrect image id"
491
  msgstr ""
492
 
493
- #: lib/class-wp-smush-dir.php:1110
494
  msgid "Could not find image id in last scanned images"
495
  msgstr ""
496
 
497
- #: lib/class-wp-smush-dir.php:1123
498
  msgid "Image couldn't be optimized"
499
  msgstr ""
500
 
501
- #: lib/class-wp-smush-dir.php:1167 lib/class-wp-smush-dir.php:1300
502
  #, php-format
503
  msgid "You've smushed %d images in total."
504
  msgstr ""
505
 
506
- #: lib/class-wp-smush-dir.php:1244
507
  msgid ""
508
  "We were unable to retrieve the image list from last scan, please continue "
509
  "with the latest scan"
510
  msgstr ""
511
 
512
- #: lib/class-wp-smush-dir.php:1342
513
  msgid "Directory list"
514
  msgstr ""
515
 
516
- #: lib/class-wp-smush-dir.php:1346
517
  msgid "Choose the folder you wish to smush."
518
  msgstr ""
519
 
520
- #: lib/class-wp-smush-dir.php:1350
521
  msgid ""
522
  "Smush will also include any images in sub folders of your selected folder."
523
  msgstr ""
524
 
525
- #: lib/class-wp-smush-dir.php:1353
526
  msgid "ADD DIRECTORY"
527
  msgstr ""
528
 
529
- #: lib/class-wp-smush-nextgen.php:76
 
 
 
 
 
 
530
  msgid "Enable NextGen Gallery integration"
531
  msgstr ""
532
 
533
- #: lib/class-wp-smush-nextgen.php:77
534
  msgid "NextGen Gallery"
535
  msgstr ""
536
 
537
- #: lib/class-wp-smush-nextgen.php:78
538
  msgid "Allow smushing images directly through NextGen Gallery settings."
539
  msgstr ""
540
 
541
- #: lib/class-wp-smush-nextgen.php:384
542
  msgid ""
543
  "We couldn't find the metadata for the image, possibly the image has been "
544
  "deleted."
545
  msgstr ""
546
 
547
- #: lib/class-wp-smush-nextgen.php:624
548
  msgid "We couldn't process the image, fields empty."
549
  msgstr ""
550
 
551
- #: lib/class-wp-smush-nextgen.php:648
552
  #, php-format
553
  msgid "Unable to smush image, %s"
554
  msgstr ""
555
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
556
  #: lib/class-wp-smush-s3.php:60
557
  msgid "Enable Amazon S3 support"
558
  msgstr ""
@@ -614,8 +659,8 @@ msgstr ""
614
  #: lib/class-wp-smush-share.php:26
615
  #, php-format
616
  msgid ""
617
- "I saved %s%s%s on my site with WP Smush ( %s ) - wanna make your website "
618
- "light and faster?"
619
  msgstr ""
620
 
621
  #: lib/class-wp-smush-share.php:34
@@ -659,19 +704,19 @@ msgid "SETTINGS"
659
  msgstr ""
660
 
661
  #: lib/class-wp-smush-ui.php:172
662
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:462
663
  msgid ""
664
  "Lets you check if any images can be further optimized. Useful after changing "
665
  "settings."
666
  msgstr ""
667
 
668
  #: lib/class-wp-smush-ui.php:172
669
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:462
670
  msgid "RE-CHECK IMAGES"
671
  msgstr ""
672
 
673
  #: lib/class-wp-smush-ui.php:173
674
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:463
675
  msgid "STATS"
676
  msgstr ""
677
 
@@ -681,7 +726,7 @@ msgid "You've smushed %d images in total"
681
  msgstr ""
682
 
683
  #: lib/class-wp-smush-ui.php:194
684
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:474
685
  msgid "Images smushed"
686
  msgstr ""
687
 
@@ -694,7 +739,7 @@ msgid "Images resized"
694
  msgstr ""
695
 
696
  #: lib/class-wp-smush-ui.php:218
697
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:480
698
  msgid "Total savings"
699
  msgstr ""
700
 
@@ -759,20 +804,12 @@ msgstr ""
759
  msgid "Save a ton of space by not storing over-sized images on your server."
760
  msgstr ""
761
 
762
- #: lib/class-wp-smush-ui.php:683
763
- msgid "GET STARTED"
764
- msgstr ""
765
-
766
- #: lib/class-wp-smush-ui.php:701
767
- msgid "BOOST YOUR PERFORMANCE - HUMMINGBIRD"
768
- msgstr ""
769
-
770
- #: lib/class-wp-smush-ui.php:739
771
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:389
772
  msgid "No attachments found - Upload some images"
773
  msgstr ""
774
 
775
- #: lib/class-wp-smush-ui.php:741
776
  #, php-format
777
  msgid ""
778
  "We haven’t found any images in your %smedia library%s yet so there’s no "
@@ -780,160 +817,156 @@ msgid ""
780
  "playing!"
781
  msgstr ""
782
 
783
- #: lib/class-wp-smush-ui.php:744
784
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:394
785
  msgid "UPLOAD IMAGES"
786
  msgstr ""
787
 
788
- #: lib/class-wp-smush-ui.php:749
789
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:399
790
  msgid "All images are smushed and up to date. Awesome!"
791
  msgstr ""
792
 
793
- #: lib/class-wp-smush-ui.php:753
794
  msgid "Still having trouble with PageSpeed tests? Give these a go…"
795
  msgstr ""
796
 
797
- #: lib/class-wp-smush-ui.php:756
798
  #, php-format
799
  msgid "Upgrade to Smush Pro for advanced lossy compression. %sTry pro free%s."
800
  msgstr ""
801
 
802
- #: lib/class-wp-smush-ui.php:758
803
  #, php-format
804
  msgid ""
805
  "Enable %sSuper-smush%s for advanced lossy compression to optimise images "
806
  "further with almost no visible drop in quality."
807
  msgstr ""
808
 
809
- #: lib/class-wp-smush-ui.php:760
810
  #, php-format
811
  msgid ""
812
  "Make sure your images are the right size for your theme. %sLearn more%s."
813
  msgstr ""
814
 
815
- #: lib/class-wp-smush-ui.php:763
816
  #, php-format
817
  msgid ""
818
  "Enable %sResize Original Images%s to scale big images down to a reasonable "
819
  "size and save a ton of space."
820
  msgstr ""
821
 
822
- #: lib/class-wp-smush-ui.php:767
823
  msgid "DISMISS"
824
  msgstr ""
825
 
826
- #: lib/class-wp-smush-ui.php:790
827
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:410
828
  #, php-format
829
  msgid "%s, you have %s%s%d%s attachment%s that needs smushing!"
830
  msgid_plural "%s, you have %s%s%d%s attachments%s that need smushing!"
831
  msgstr[0] ""
832
  msgstr[1] ""
833
 
834
- #: lib/class-wp-smush-ui.php:792
835
  #, php-format
836
  msgid " %sUpgrade to Pro%s to bulk smush all your images with one click."
837
  msgstr ""
838
 
839
- #: lib/class-wp-smush-ui.php:793
840
  msgid " Free users can smush 50 images with each click."
841
  msgstr ""
842
 
843
- #: lib/class-wp-smush-ui.php:798
844
  msgid "Click to start Bulk Smushing images in Media Library"
845
  msgstr ""
846
 
847
- #: lib/class-wp-smush-ui.php:803
848
  msgid ""
849
  "Tip: Enable Super-smush in the Settings area to get even more savings with "
850
  "almost no visible drop in quality."
851
  msgstr ""
852
 
853
- #: lib/class-wp-smush-ui.php:825
854
  #, php-format
855
  msgid ""
856
  "%sBulk smush is currently running.%s You need to keep this page open for the "
857
  "process to complete."
858
  msgstr ""
859
 
860
- #: lib/class-wp-smush-ui.php:836
861
  #, php-format
862
  msgid "%s%d%s of your media attachments have been smushed."
863
  msgstr ""
864
 
865
- #: lib/class-wp-smush-ui.php:840
866
  msgid "Stop current bulk smush process."
867
  msgstr ""
868
 
869
- #: lib/class-wp-smush-ui.php:877
870
  #, php-format
871
  msgid "%s, you have %s%s%d%s attachment%s that needs re-compressing!"
872
  msgid_plural "%s, you have %s%s%d%s attachments%s that need re-compressing!"
873
  msgstr[0] ""
874
  msgstr[1] ""
875
 
876
- #: lib/class-wp-smush-ui.php:878
877
  msgid "Skip re-smushing the images"
878
  msgstr ""
879
 
880
- #: lib/class-wp-smush-ui.php:898
881
  msgid "Your settings have been updated!"
882
  msgstr ""
883
 
884
- #. Plugin Name of the plugin/theme
885
- #: lib/class-wp-smush-ui.php:931
886
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:71
887
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:90
888
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:92
889
- msgid "WP Smush"
890
  msgstr ""
891
 
892
- #: lib/class-wp-smush-ui.php:933
893
  #, php-format
894
  msgid ""
895
  "Automatic smushing is %senabled%s. Newly uploaded images will be "
896
  "automagically compressed."
897
  msgstr ""
898
 
899
- #: lib/class-wp-smush-ui.php:933
900
  #, php-format
901
  msgid ""
902
  "Automatic smushing is %sdisabled%s. Newly uploaded images will need to be "
903
  "manually smushed."
904
  msgstr ""
905
 
906
- #: lib/class-wp-smush-ui.php:980
907
  msgid "Thanks for installing Smush. We hope you like it!"
908
  msgstr ""
909
 
910
- #: lib/class-wp-smush-ui.php:981
911
  msgid ""
912
  "And hey, if you do, you can join WPMU DEV for a free 30 day trial and get "
913
  "access to even more features!"
914
  msgstr ""
915
 
916
- #: lib/class-wp-smush-ui.php:982 lib/class-wp-smush-ui.php:986
917
  msgid "Try Smush Pro Free"
918
  msgstr ""
919
 
920
- #: lib/class-wp-smush-ui.php:984
921
  msgid "Thanks for upgrading Smush!"
922
  msgstr ""
923
 
924
- #: lib/class-wp-smush-ui.php:1035
925
  #, php-format
926
  msgid ""
927
- "Did you know WP Smush Pro delivers up to 2x better compression, allows you "
928
- "to smush your originals and removes any bulk smushing limits? – %sTry it "
929
  "absolutely FREE%s"
930
  msgstr ""
931
 
932
- #: lib/class-wp-smush-ui.php:1035 lib/class-wp-smush-ui.php:1060
933
- msgid "Try WP Smush Pro for FREE"
934
  msgstr ""
935
 
936
- #: lib/class-wp-smush-ui.php:1060
937
  #, php-format
938
  msgid ""
939
  "Smush Pro gives you all these extra settings and absolutely no limits on "
@@ -942,11 +975,11 @@ msgid ""
942
  "%s"
943
  msgstr ""
944
 
945
- #: lib/class-wp-smush-ui.php:1083
946
  msgid "Validating.."
947
  msgstr ""
948
 
949
- #: lib/class-wp-smush-ui.php:1085
950
  #, php-format
951
  msgid ""
952
  "It looks like Smush couldn’t verify your WPMU DEV membership so Pro features "
@@ -954,21 +987,21 @@ msgid ""
954
  "%s or get in touch with our %ssupport team%s."
955
  msgstr ""
956
 
957
- #: lib/class-wp-smush-ui.php:1107
958
  msgid "UPDATE SETTINGS"
959
  msgstr ""
960
 
961
- #: lib/class-wp-smush-ui.php:1109
962
  msgid "Smush will automatically check for any images that need re-smushing."
963
  msgstr ""
964
 
965
- #: lib/class-wp-smush-ui.php:1135
966
  msgid ""
967
  "Smush settings were updated, performing a quick scan to check if any of the "
968
  "images need to be Smushed again."
969
  msgstr ""
970
 
971
- #: lib/class-wp-smush-ui.php:1156
972
  #, php-format
973
  msgid ""
974
  "Every time you upload an image to your site, WordPress generates a resized "
@@ -978,40 +1011,48 @@ msgid ""
978
  "optimized:%s"
979
  msgstr ""
980
 
981
- #: lib/class-wp-smush-ui.php:1201
982
  msgid "Max width"
983
  msgstr ""
984
 
985
- #: lib/class-wp-smush-ui.php:1204
986
  msgid "Max height"
987
  msgstr ""
988
 
989
- #: lib/class-wp-smush-ui.php:1207
990
  #, php-format
991
  msgid ""
992
  "Currently, your largest image size is set at %s%dpx wide %s %dpx high%s."
993
  msgstr ""
994
 
995
- #: lib/class-wp-smush-ui.php:1208
996
  msgid ""
997
  "Just to let you know, the width you've entered is less than your largest "
998
  "image and may result in pixelation."
999
  msgstr ""
1000
 
1001
- #: lib/class-wp-smush-ui.php:1209
1002
  msgid ""
1003
  "Just to let you know, the height you’ve entered is less than your largest "
1004
  "image and may result in pixelation."
1005
  msgstr ""
1006
 
1007
- #: lib/class-wp-smush-ui.php:1269
 
 
 
 
 
 
 
 
1008
  msgid ""
1009
  "Note: This data, called EXIF, adds to the size of the image. While this "
1010
  "information might be important to photographers, it’s unnecessary for most "
1011
  "users and safe to remove."
1012
  msgstr ""
1013
 
1014
- #: lib/class-wp-smush-ui.php:1272
1015
  msgid ""
1016
  "Note: Any PNGs with transparency will be ignored. Smush will only convert "
1017
  "PNGs if it results in a smaller file size. The resulting file will have a "
@@ -1019,170 +1060,170 @@ msgid ""
1019
  "contain the original PNG filename will need to be updated."
1020
  msgstr ""
1021
 
1022
- #: lib/class-wp-smush-ui.php:1275
1023
  msgid ""
1024
  "Note: For this process to happen automatically you need automatic smushing "
1025
  "enabled."
1026
  msgstr ""
1027
 
1028
- #: lib/class-wp-smush-ui.php:1295
1029
  msgid "GET SMUSH PRO"
1030
  msgstr ""
1031
 
1032
- #: lib/class-wp-smush-ui.php:1295 lib/class-wp-smush-ui.php:1325
1033
  msgid "LEARN MORE"
1034
  msgstr ""
1035
 
1036
- #: lib/class-wp-smush-ui.php:1296
1037
  msgid "Here’s what you’ll get by uprading to Smush Pro."
1038
  msgstr ""
1039
 
1040
- #: lib/class-wp-smush-ui.php:1300
1041
  msgid "Double the compression"
1042
  msgstr ""
1043
 
1044
- #: lib/class-wp-smush-ui.php:1301
1045
  msgid ""
1046
  "Optimize images 2x more than regular smushing and with no visible loss in "
1047
  "quality using Smush’s intelligent multi-pass lossy compression."
1048
  msgstr ""
1049
 
1050
- #: lib/class-wp-smush-ui.php:1305
1051
  msgid "No limits"
1052
  msgstr ""
1053
 
1054
- #: lib/class-wp-smush-ui.php:1306
1055
  msgid ""
1056
  "The free version allows you to Smush up to 1Mb images, and 50 at a time. The "
1057
  "Pro version releases all those limits so you can smush all the things."
1058
  msgstr ""
1059
 
1060
- #: lib/class-wp-smush-ui.php:1310
1061
  msgid "Include your originals"
1062
  msgstr ""
1063
 
1064
- #: lib/class-wp-smush-ui.php:1311
1065
  msgid ""
1066
  "The free version of Smush only compresses your automatically generated image "
1067
  "thumbnails. With Pro you can compress your original size images too - in "
1068
  "case you want to use them in your theme."
1069
  msgstr ""
1070
 
1071
- #: lib/class-wp-smush-ui.php:1315
1072
  msgid "Convert PNGs to JPEGs"
1073
  msgstr ""
1074
 
1075
- #: lib/class-wp-smush-ui.php:1316
1076
  msgid ""
1077
  "If any of your non-transparent PNGs can be made smaller by converting to "
1078
  "JPEG, Smush will automatically convert them to JPEGs so they load faster for "
1079
  "your visitors."
1080
  msgstr ""
1081
 
1082
- #: lib/class-wp-smush-ui.php:1320
1083
  msgid "Integration with NextGen Gallery"
1084
  msgstr ""
1085
 
1086
- #: lib/class-wp-smush-ui.php:1321
1087
  msgid ""
1088
  "Using the NextGen Gallery plugin? The Pro version allows you to compress "
1089
  "images directly through NextGen Gallery’s settings."
1090
  msgstr ""
1091
 
1092
- #: lib/class-wp-smush-ui.php:1324
1093
  #, php-format
1094
  msgid ""
1095
  "Get all of this including 200% faster smushing, Amazon S3 support and heaps "
1096
  "more as part of a WPMU DEV membership."
1097
  msgstr ""
1098
 
1099
- #: lib/class-wp-smush.php:203
1100
  msgid "File path is empty"
1101
  msgstr ""
1102
 
1103
- #: lib/class-wp-smush.php:206
1104
  #, php-format
1105
  msgid "Could not find %s"
1106
  msgstr ""
1107
 
1108
- #: lib/class-wp-smush.php:209
1109
  #, php-format
1110
  msgid "%s is not writable"
1111
  msgstr ""
1112
 
1113
- #: lib/class-wp-smush.php:219
1114
  #, php-format
1115
  msgid "Skipped (%s), image not found. Attachment: %s"
1116
  msgstr ""
1117
 
1118
- #: lib/class-wp-smush.php:222
1119
  #, php-format
1120
  msgid "Skipped (%s), size limit exceeded. Attachment: %s"
1121
  msgstr ""
1122
 
1123
- #: lib/class-wp-smush.php:240
1124
  msgid "Unknown API error"
1125
  msgstr ""
1126
 
1127
- #: lib/class-wp-smush.php:722
1128
  msgid ""
1129
  "Skipped due to a timeout error. You can increase the request timeout to make "
1130
  "sure Smush has enough time to process larger files. "
1131
  "`define('WP_SMUSH_API_TIMEOUT', 150);`."
1132
  msgstr ""
1133
 
1134
- #: lib/class-wp-smush.php:725
1135
  #, php-format
1136
  msgid "Error posting to API: %s"
1137
  msgstr ""
1138
 
1139
- #: lib/class-wp-smush.php:732
1140
  #, php-format
1141
  msgid "Error posting to API: %s %s"
1142
  msgstr ""
1143
 
1144
- #: lib/class-wp-smush.php:749
1145
  msgid "Smush data corrupted, try again."
1146
  msgstr ""
1147
 
1148
- #: lib/class-wp-smush.php:775
1149
  msgid "Image couldn't be smushed"
1150
  msgstr ""
1151
 
1152
- #: lib/class-wp-smush.php:1020
1153
  #, php-format
1154
  msgid "%d images reduced "
1155
  msgstr ""
1156
 
1157
- #: lib/class-wp-smush.php:1020
1158
  msgid "Reduced "
1159
  msgstr ""
1160
 
1161
- #: lib/class-wp-smush.php:1024
1162
  #, php-format
1163
  msgid "by %s %s"
1164
  msgstr ""
1165
 
1166
- #: lib/class-wp-smush.php:1030
1167
  #, php-format
1168
  msgid "<br /> Image Size: %s"
1169
  msgstr ""
1170
 
1171
- #: lib/class-wp-smush.php:1066
1172
  msgid "Detailed stats for all the image sizes"
1173
  msgstr ""
1174
 
1175
- #: lib/class-wp-smush.php:1066
1176
- #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:236
1177
  msgid "Smush stats"
1178
  msgstr ""
1179
 
1180
- #: lib/class-wp-smush.php:1110
1181
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:263
1182
  msgid "Not processed"
1183
  msgstr ""
1184
 
1185
- #: lib/class-wp-smush.php:1425
1186
  #, php-format
1187
  msgid ""
1188
  "When you upload an image to WordPress it automatically creates %s thumbnail "
@@ -1191,47 +1232,47 @@ msgid ""
1191
  "site we don’t Smush them. Pro users can override this."
1192
  msgstr ""
1193
 
1194
- #: lib/class-wp-smush.php:1428
1195
  msgid ""
1196
  "Image couldn't be smushed as it exceeded the 1Mb size limit, Pro users can "
1197
  "smush images with size up to 32Mb."
1198
  msgstr ""
1199
 
1200
- #: lib/class-wp-smush.php:1430
1201
  msgid " Skipped"
1202
  msgstr ""
1203
 
1204
- #: lib/class-wp-smush.php:1452
1205
- #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:439
1206
  msgid "Image size"
1207
  msgstr ""
1208
 
1209
- #: lib/class-wp-smush.php:1453
1210
- #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:440
1211
  msgid "Savings"
1212
  msgstr ""
1213
 
1214
- #: lib/class-wp-smush.php:1701
1215
  msgid "Restore original image."
1216
  msgstr ""
1217
 
1218
- #: lib/class-wp-smush.php:1701
1219
  msgid "Restore image"
1220
  msgstr ""
1221
 
1222
- #: lib/class-wp-smush.php:1749
1223
  msgid "Smush image including original file."
1224
  msgstr ""
1225
 
1226
- #: lib/class-wp-smush.php:1749
1227
  msgid "Resmush image"
1228
  msgstr ""
1229
 
1230
- #: lib/class-wp-smush.php:2426
1231
  msgid "Plugin: Smush"
1232
  msgstr ""
1233
 
1234
- #: lib/class-wp-smush.php:2428
1235
  msgid ""
1236
  "Note: Smush does not interact with end users on your website. The only input "
1237
  "option Smush has is to a newsletter subscription for site admins only. If "
@@ -1239,14 +1280,14 @@ msgid ""
1239
  "use the information below."
1240
  msgstr ""
1241
 
1242
- #: lib/class-wp-smush.php:2430
1243
  msgid ""
1244
  "Smush sends images to the WPMU DEV servers to optimize them for web use. "
1245
  "This includes the transfer of EXIF data. The EXIF data will either be "
1246
  "stripped or returned as it is. It is not stored on the WPMU DEV servers."
1247
  msgstr ""
1248
 
1249
- #: lib/class-wp-smush.php:2435
1250
  msgid ""
1251
  "Smush uses a third-party email service (Drip) to send informational emails "
1252
  "to the site administrator. The administrator's email address is sent to Drip "
@@ -1254,38 +1295,34 @@ msgid ""
1254
  "collected by Drip."
1255
  msgstr ""
1256
 
1257
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:71
1258
- msgid "Bulk WP Smush"
1259
- msgstr ""
1260
-
1261
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:391
1262
  #, php-format
1263
  msgid ""
1264
  "We haven’t found any images in your %sgallery%s yet, so there’s no smushing "
1265
  "to be done! Once you upload images, reload this page and start playing!"
1266
  msgstr ""
1267
 
1268
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:425
1269
  #, php-format
1270
  msgid ""
1271
  "Enable Super-smush in the %sSettings%s area to get even more savings with "
1272
  "almost no visible drop in quality."
1273
  msgstr ""
1274
 
1275
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:440
1276
  #, php-format
1277
  msgid "Smush individual images via your %sManage Galleries%s section"
1278
  msgstr ""
1279
 
1280
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:440
1281
  msgid "Manage Galleries"
1282
  msgstr ""
1283
 
1284
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:496
1285
  msgid "Super-smushed images"
1286
  msgstr ""
1287
 
1288
- #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:504
1289
  #, php-format
1290
  msgid "%sDISABLED%s"
1291
  msgstr ""
@@ -1296,7 +1333,7 @@ msgid ""
1296
  "`WP_SMUSH_API_TIMEOUT`."
1297
  msgstr ""
1298
 
1299
- #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:205
1300
  #, php-format
1301
  msgid "Reduced by %s ( %01.1f%% )"
1302
  msgstr ""
@@ -1305,8 +1342,8 @@ msgstr ""
1305
  msgid "Get Fast"
1306
  msgstr ""
1307
 
1308
- #: wp-smush.php:211
1309
- msgid "WP Smush Free was deactivated. You have WP Smush Pro active!"
1310
  msgstr ""
1311
 
1312
  #. Plugin URI of the plugin/theme
1
  #, fuzzy
2
  msgid ""
3
  msgstr ""
4
+ "Project-Id-Version: Smush\n"
5
+ "POT-Creation-Date: 2018-05-24 10:53+0530\n"
6
+ "PO-Revision-Date: 2018-05-24 10:52+0530\n"
7
  "Last-Translator: Umesh <umeshsingla05@gmail.com>\n"
8
  "Language-Team: Umesh <umeshsingla05@gmail.com>\n"
9
  "MIME-Version: 1.0\n"
32
  msgstr ""
33
 
34
  #: assets/shared-ui/plugin-ui.php:272 extras/free-dashboard/module.php:395
35
+ #: extras/free-dashboard/module.php:434 lib/class-wp-smush-ui.php:948
36
  msgid "Saving"
37
  msgstr ""
38
 
39
+ #: assets/shared-ui/plugin-ui.php:301 lib/class-wp-smush-ui.php:948
40
  msgid "Dismiss"
41
  msgstr ""
42
 
157
 
158
  #: lib/class-wp-smush-admin.php:261
159
  msgid ""
160
+ "Save a ton of space by not storing over-sized images on your server. Set a "
161
+ "maximum height and width for all images uploaded to your site so that any "
162
+ "unnecessarily large images are automatically resized before they are added "
163
+ "to the media gallery."
164
  msgstr ""
165
 
166
  #: lib/class-wp-smush-admin.php:264
188
  "JPEG will further reduce its size."
189
  msgstr ""
190
 
191
+ #: lib/class-wp-smush-admin.php:294 lib/class-wp-smush-admin.php:2005
192
+ #: lib/class-wp-smush-dir.php:287 lib/class-wp-smush-ui.php:732
193
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:81
194
+ msgid "Smush Pro"
195
+ msgstr ""
196
+
197
+ #. Plugin Name of the plugin/theme
198
+ #: lib/class-wp-smush-admin.php:294 lib/class-wp-smush-admin.php:2257
199
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:81
200
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:101
201
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:103
202
+ msgid "Smush"
203
+ msgstr ""
204
+
205
+ #: lib/class-wp-smush-admin.php:397 lib/class-wp-smush.php:1112
206
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:172
207
+ #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:269
208
  msgid "Super-Smush"
209
  msgstr ""
210
 
211
+ #: lib/class-wp-smush-admin.php:398
212
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:173
213
  msgid "Smush Now"
214
  msgstr ""
215
 
216
+ #: lib/class-wp-smush-admin.php:399
217
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:174
218
  msgid "{{errors}} image(s) were skipped due to an error."
219
  msgstr ""
220
 
221
+ #: lib/class-wp-smush-admin.php:400
222
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:175
223
  msgid "All images are fully optimized."
224
  msgstr ""
225
 
226
+ #: lib/class-wp-smush-admin.php:401
227
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:176
228
  msgid "Restoring image.."
229
  msgstr ""
230
 
231
+ #: lib/class-wp-smush-admin.php:402
232
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:177
233
  msgid "Smushing image.."
234
  msgstr ""
235
 
236
+ #: lib/class-wp-smush-admin.php:403
237
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:178
238
  msgid "Checking images.."
239
  msgstr ""
240
 
241
+ #: lib/class-wp-smush-admin.php:404
242
  msgid ""
243
  "We successfully verified your membership, all the Pro features should work "
244
  "completely. "
245
  msgstr ""
246
 
247
+ #: lib/class-wp-smush-admin.php:405
248
  msgid "Your membership couldn't be verified."
249
  msgstr ""
250
 
251
+ #: lib/class-wp-smush-admin.php:406
252
  msgid "Missing file path."
253
  msgstr ""
254
 
255
+ #: lib/class-wp-smush-admin.php:408
256
  msgid "image could not be smushed."
257
  msgstr ""
258
 
259
+ #: lib/class-wp-smush-admin.php:409
260
  msgid "images could not be smushed."
261
  msgstr ""
262
 
263
+ #: lib/class-wp-smush-admin.php:410 lib/class-wp-smush.php:1030
264
+ #: lib/class-wp-smush.php:1037
265
+ #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:188
266
+ #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:191
267
  msgid "Already Optimized"
268
  msgstr ""
269
 
270
+ #: lib/class-wp-smush-admin.php:411
271
  msgid "Ajax Error"
272
  msgstr ""
273
 
274
+ #: lib/class-wp-smush-admin.php:412
275
  msgid "All Done!"
276
  msgstr ""
277
 
278
+ #: lib/class-wp-smush-admin.php:413 lib/class-wp-smush-ui.php:72
279
  msgid "QUICK SETUP"
280
  msgstr ""
281
 
282
+ #: lib/class-wp-smush-admin.php:413 lib/class-wp-smush-ui.php:818
283
  msgid "Skip"
284
  msgstr ""
285
 
286
+ #: lib/class-wp-smush-admin.php:414
287
  msgid "Give us a moment while we sync the stats."
288
  msgstr ""
289
 
290
+ #: lib/class-wp-smush-admin.php:589
291
  #, php-format
292
  msgid "%s%d%s Attachment(s) could not be smushed, as no ID was received."
293
  msgstr ""
294
 
295
+ #: lib/class-wp-smush-admin.php:605
296
  #, php-format
297
  msgid ""
298
  "You've exceeded Bulk Smush limit of %d images at once for standard users. "
299
  "Click on Bulk Smush to continue."
300
  msgstr ""
301
 
302
+ #: lib/class-wp-smush-admin.php:629
303
  #, php-format
304
  msgid "%s%d%s Attachment(s) were skipped."
305
  msgstr ""
306
 
307
+ #: lib/class-wp-smush-admin.php:702
308
  #, php-format
309
  msgid ""
310
  "%s%d%s Attachment(s) were not smushed due to a timeout error, You can "
312
  "larger files. `define('WP_SMUSH_API_TIMEOUT', 150);`"
313
  msgstr ""
314
 
315
+ #: lib/class-wp-smush-admin.php:761 lib/class-wp-smush-nextgen.php:447
316
  msgid "You don't have permission to work with uploaded files."
317
  msgstr ""
318
 
319
+ #: lib/class-wp-smush-admin.php:765 lib/class-wp-smush-nextgen.php:451
320
  msgid "No attachment ID was provided."
321
  msgstr ""
322
 
323
+ #: lib/class-wp-smush-admin.php:777
324
  msgid "Attachment Skipped - Check `wp_smush_image` filter."
325
  msgstr ""
326
 
327
+ #: lib/class-wp-smush-admin.php:968
328
  #, php-format
329
  msgid "<strong>%d of %d images</strong> were sent for smushing:"
330
  msgstr ""
331
 
332
+ #: lib/class-wp-smush-admin.php:1157 lib/class-wp-smush.php:1118
333
  msgid "Smushing in progress.."
334
  msgstr ""
335
 
336
+ #: lib/class-wp-smush-admin.php:1163 lib/class-wp-smush.php:1137
337
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:294
338
  msgid "Smush Now!"
339
  msgstr ""
340
 
341
+ #: lib/class-wp-smush-admin.php:1184
342
  msgid "Settings"
343
  msgstr ""
344
 
345
+ #: lib/class-wp-smush-admin.php:1347
346
  msgid "Image not smushed, fields empty."
347
  msgstr ""
348
 
349
+ #: lib/class-wp-smush-admin.php:1354 lib/class-wp-smush-nextgen.php:638
350
  msgid ""
351
  "Image couldn't be smushed as the nonce verification failed, try reloading "
352
  "the page."
353
  msgstr ""
354
 
355
+ #: lib/class-wp-smush-admin.php:1400
356
  msgid ""
357
  "We haven’t found any images in your media library yet so there’s no smushing "
358
  "to be done! Once you upload images, reload this page and start playing!"
359
  msgstr ""
360
 
361
+ #: lib/class-wp-smush-admin.php:1415
362
  msgid "Yay! All images are optimized as per your current settings."
363
  msgstr ""
364
 
365
+ #: lib/class-wp-smush-admin.php:1610 lib/class-wp-smush-ui.php:845
366
  #, php-format
367
  msgid "You have images that need smushing. %sBulk smush now!%s"
368
  msgstr ""
369
 
370
+ #: lib/class-wp-smush-admin.php:2004
371
  msgid "Review your setting now."
372
  msgstr ""
373
 
374
+ #: lib/class-wp-smush-admin.php:2006
 
 
 
 
 
375
  msgid ""
376
+ "Welcome to the newest version of Smush! In this update we've added the "
377
  "ability to bulk smush images in directories outside your uploads folder."
378
  msgstr ""
379
 
380
+ #: lib/class-wp-smush-admin.php:2009
381
  #, php-format
382
  msgid ""
383
  " And as a multisite user, you can manage %sSmush settings%s globally across "
384
  "all sites!"
385
  msgstr ""
386
 
387
+ #: lib/class-wp-smush-admin.php:2012
388
  #, php-format
389
  msgid " %sFind out more here >>%s"
390
  msgstr ""
391
 
392
+ #: lib/class-wp-smush-backup.php:148 lib/class-wp-smush-nextgen.php:534
 
 
 
 
393
  msgid "Error in processing restore action, Fields empty."
394
  msgstr ""
395
 
396
+ #: lib/class-wp-smush-backup.php:155 lib/class-wp-smush-nextgen.php:542
397
  msgid "Image not restored, Nonce verification failed."
398
  msgstr ""
399
 
400
+ #: lib/class-wp-smush-backup.php:286 lib/class-wp-smush-nextgen.php:620
401
  msgid "Unable to restore image"
402
  msgstr ""
403
 
405
  msgid "Directory-smush savings"
406
  msgstr ""
407
 
408
+ #: lib/class-wp-smush-dir.php:94
409
  msgid "Updating Stats"
410
  msgstr ""
411
 
412
+ #: lib/class-wp-smush-dir.php:105
413
  msgid "Smush images that aren't located in your uploads folder."
414
  msgstr ""
415
 
416
+ #: lib/class-wp-smush-dir.php:107
417
  msgid "Select a directory you'd like to Smush."
418
  msgstr ""
419
 
420
+ #: lib/class-wp-smush-dir.php:107
421
  msgid "Choose directory"
422
  msgstr ""
423
 
424
+ #: lib/class-wp-smush-dir.php:224
425
  msgid "RESUME LAST SCAN"
426
  msgstr ""
427
 
428
+ #: lib/class-wp-smush-dir.php:263
429
  msgid "DIRECTORY SMUSH"
430
  msgstr ""
431
 
432
+ #: lib/class-wp-smush-dir.php:268
433
  msgid ""
434
  "In addition to smushing your media uploads, you may want to also smush "
435
  "images living outside your uploads directory. Simply add any directories you "
436
  "wish to smush and bulk smush away!"
437
  msgstr ""
438
 
439
+ #: lib/class-wp-smush-dir.php:281
440
  msgid ""
441
  "All images for the selected directory are smushed and up to date. Awesome!"
442
  msgstr ""
443
 
444
+ #: lib/class-wp-smush-dir.php:284
445
  #, php-format
446
  msgid ""
447
  "%s/%s image(s) were successfully smushed, however %s image(s) could not be "
448
  "smushed due to an error."
449
  msgstr ""
450
 
451
+ #: lib/class-wp-smush-dir.php:287
452
  #, php-format
453
  msgid ""
454
  " %sUpgrade to pro%s to bulk smush all your directory images with one click. "
455
  "Free users can smush 50 images with each click."
456
  msgstr ""
457
 
458
+ #: lib/class-wp-smush-dir.php:291 lib/class-wp-smush-ui.php:143
459
+ #: lib/class-wp-smush-ui.php:713
460
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:429
461
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:470
462
  msgid "BULK SMUSH"
463
  msgstr ""
464
 
465
+ #: lib/class-wp-smush-dir.php:293
466
  msgid "Click to stop the directory smushing process."
467
  msgstr ""
468
 
469
+ #: lib/class-wp-smush-dir.php:294 lib/class-wp-smush-ui.php:780
470
  msgid "CANCEL"
471
  msgstr ""
472
 
473
+ #: lib/class-wp-smush-dir.php:302
474
  msgid "CHOOSE DIRECTORY"
475
  msgstr ""
476
 
477
+ #: lib/class-wp-smush-dir.php:474
478
  msgid "Exclude directory from Smush List"
479
  msgstr ""
480
 
481
+ #: lib/class-wp-smush-dir.php:619
482
  msgid "We could not find any images in the selected directory."
483
  msgstr ""
484
 
485
+ #: lib/class-wp-smush-dir.php:942
486
  #, php-format
487
  msgid "%d images"
488
  msgstr ""
489
 
490
+ #: lib/class-wp-smush-dir.php:977
491
  msgid "Waiting.."
492
  msgstr ""
493
 
494
+ #: lib/class-wp-smush-dir.php:1099
495
  msgid "Incorrect image id"
496
  msgstr ""
497
 
498
+ #: lib/class-wp-smush-dir.php:1133
499
  msgid "Could not find image id in last scanned images"
500
  msgstr ""
501
 
502
+ #: lib/class-wp-smush-dir.php:1146
503
  msgid "Image couldn't be optimized"
504
  msgstr ""
505
 
506
+ #: lib/class-wp-smush-dir.php:1190 lib/class-wp-smush-dir.php:1323
507
  #, php-format
508
  msgid "You've smushed %d images in total."
509
  msgstr ""
510
 
511
+ #: lib/class-wp-smush-dir.php:1267
512
  msgid ""
513
  "We were unable to retrieve the image list from last scan, please continue "
514
  "with the latest scan"
515
  msgstr ""
516
 
517
+ #: lib/class-wp-smush-dir.php:1365
518
  msgid "Directory list"
519
  msgstr ""
520
 
521
+ #: lib/class-wp-smush-dir.php:1369
522
  msgid "Choose the folder you wish to smush."
523
  msgstr ""
524
 
525
+ #: lib/class-wp-smush-dir.php:1373
526
  msgid ""
527
  "Smush will also include any images in sub folders of your selected folder."
528
  msgstr ""
529
 
530
+ #: lib/class-wp-smush-dir.php:1376
531
  msgid "ADD DIRECTORY"
532
  msgstr ""
533
 
534
+ #: lib/class-wp-smush-dir.php:1403
535
+ msgid ""
536
+ "Directory smushing requires custom tables and it seems there was an error "
537
+ "creating tables. For help, please contact our team on the support forums"
538
+ msgstr ""
539
+
540
+ #: lib/class-wp-smush-nextgen.php:80
541
  msgid "Enable NextGen Gallery integration"
542
  msgstr ""
543
 
544
+ #: lib/class-wp-smush-nextgen.php:81
545
  msgid "NextGen Gallery"
546
  msgstr ""
547
 
548
+ #: lib/class-wp-smush-nextgen.php:82
549
  msgid "Allow smushing images directly through NextGen Gallery settings."
550
  msgstr ""
551
 
552
+ #: lib/class-wp-smush-nextgen.php:388
553
  msgid ""
554
  "We couldn't find the metadata for the image, possibly the image has been "
555
  "deleted."
556
  msgstr ""
557
 
558
+ #: lib/class-wp-smush-nextgen.php:631
559
  msgid "We couldn't process the image, fields empty."
560
  msgstr ""
561
 
562
+ #: lib/class-wp-smush-nextgen.php:655
563
  #, php-format
564
  msgid "Unable to smush image, %s"
565
  msgstr ""
566
 
567
+ #: lib/class-wp-smush-recommender.php:50
568
+ msgid "Check out our other free wordpress.org plugins!"
569
+ msgstr ""
570
+
571
+ #: lib/class-wp-smush-recommender.php:54
572
+ msgid "Hummingbird Page Speed Optimization"
573
+ msgstr ""
574
+
575
+ #: lib/class-wp-smush-recommender.php:55
576
+ msgid ""
577
+ "Performance Tests, File Optimization & Compression, Page, Browser & Gravatar "
578
+ "Caching, GZIP Compression, CloudFlare Integration & more."
579
+ msgstr ""
580
+
581
+ #: lib/class-wp-smush-recommender.php:60
582
+ msgid "Defender Security, Monitoring, and Hack Protection"
583
+ msgstr ""
584
+
585
+ #: lib/class-wp-smush-recommender.php:61
586
+ msgid ""
587
+ "Security Tweaks & Recommendations, File & Malware Scanning, Login & 404 "
588
+ "Lockout Protection, Two-Factor Authentication & more."
589
+ msgstr ""
590
+
591
+ #: lib/class-wp-smush-recommender.php:66
592
+ msgid "SmartCrawl Search Engine Optimization"
593
+ msgstr ""
594
+
595
+ #: lib/class-wp-smush-recommender.php:67
596
+ msgid ""
597
+ "Customize Titles & Meta Data, OpenGraph, Twitter & Pinterest Support, Auto-"
598
+ "Keyword Linking, SEO & Readability Analysis, Sitemaps, URL Crawler & more."
599
+ msgstr ""
600
+
601
  #: lib/class-wp-smush-s3.php:60
602
  msgid "Enable Amazon S3 support"
603
  msgstr ""
659
  #: lib/class-wp-smush-share.php:26
660
  #, php-format
661
  msgid ""
662
+ "I saved %s%s%s on my site with Smush ( %s ) - wanna make your website light "
663
+ "and faster?"
664
  msgstr ""
665
 
666
  #: lib/class-wp-smush-share.php:34
704
  msgstr ""
705
 
706
  #: lib/class-wp-smush-ui.php:172
707
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:487
708
  msgid ""
709
  "Lets you check if any images can be further optimized. Useful after changing "
710
  "settings."
711
  msgstr ""
712
 
713
  #: lib/class-wp-smush-ui.php:172
714
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:487
715
  msgid "RE-CHECK IMAGES"
716
  msgstr ""
717
 
718
  #: lib/class-wp-smush-ui.php:173
719
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:488
720
  msgid "STATS"
721
  msgstr ""
722
 
726
  msgstr ""
727
 
728
  #: lib/class-wp-smush-ui.php:194
729
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:499
730
  msgid "Images smushed"
731
  msgstr ""
732
 
739
  msgstr ""
740
 
741
  #: lib/class-wp-smush-ui.php:218
742
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:505
743
  msgid "Total savings"
744
  msgstr ""
745
 
804
  msgid "Save a ton of space by not storing over-sized images on your server."
805
  msgstr ""
806
 
807
+ #: lib/class-wp-smush-ui.php:679
808
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:414
 
 
 
 
 
 
 
 
809
  msgid "No attachments found - Upload some images"
810
  msgstr ""
811
 
812
+ #: lib/class-wp-smush-ui.php:681
813
  #, php-format
814
  msgid ""
815
  "We haven’t found any images in your %smedia library%s yet so there’s no "
817
  "playing!"
818
  msgstr ""
819
 
820
+ #: lib/class-wp-smush-ui.php:684
821
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:419
822
  msgid "UPLOAD IMAGES"
823
  msgstr ""
824
 
825
+ #: lib/class-wp-smush-ui.php:689
826
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:424
827
  msgid "All images are smushed and up to date. Awesome!"
828
  msgstr ""
829
 
830
+ #: lib/class-wp-smush-ui.php:693
831
  msgid "Still having trouble with PageSpeed tests? Give these a go…"
832
  msgstr ""
833
 
834
+ #: lib/class-wp-smush-ui.php:696
835
  #, php-format
836
  msgid "Upgrade to Smush Pro for advanced lossy compression. %sTry pro free%s."
837
  msgstr ""
838
 
839
+ #: lib/class-wp-smush-ui.php:698
840
  #, php-format
841
  msgid ""
842
  "Enable %sSuper-smush%s for advanced lossy compression to optimise images "
843
  "further with almost no visible drop in quality."
844
  msgstr ""
845
 
846
+ #: lib/class-wp-smush-ui.php:700
847
  #, php-format
848
  msgid ""
849
  "Make sure your images are the right size for your theme. %sLearn more%s."
850
  msgstr ""
851
 
852
+ #: lib/class-wp-smush-ui.php:703
853
  #, php-format
854
  msgid ""
855
  "Enable %sResize Original Images%s to scale big images down to a reasonable "
856
  "size and save a ton of space."
857
  msgstr ""
858
 
859
+ #: lib/class-wp-smush-ui.php:707
860
  msgid "DISMISS"
861
  msgstr ""
862
 
863
+ #: lib/class-wp-smush-ui.php:730
864
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:435
865
  #, php-format
866
  msgid "%s, you have %s%s%d%s attachment%s that needs smushing!"
867
  msgid_plural "%s, you have %s%s%d%s attachments%s that need smushing!"
868
  msgstr[0] ""
869
  msgstr[1] ""
870
 
871
+ #: lib/class-wp-smush-ui.php:732
872
  #, php-format
873
  msgid " %sUpgrade to Pro%s to bulk smush all your images with one click."
874
  msgstr ""
875
 
876
+ #: lib/class-wp-smush-ui.php:733
877
  msgid " Free users can smush 50 images with each click."
878
  msgstr ""
879
 
880
+ #: lib/class-wp-smush-ui.php:738
881
  msgid "Click to start Bulk Smushing images in Media Library"
882
  msgstr ""
883
 
884
+ #: lib/class-wp-smush-ui.php:743
885
  msgid ""
886
  "Tip: Enable Super-smush in the Settings area to get even more savings with "
887
  "almost no visible drop in quality."
888
  msgstr ""
889
 
890
+ #: lib/class-wp-smush-ui.php:765
891
  #, php-format
892
  msgid ""
893
  "%sBulk smush is currently running.%s You need to keep this page open for the "
894
  "process to complete."
895
  msgstr ""
896
 
897
+ #: lib/class-wp-smush-ui.php:776
898
  #, php-format
899
  msgid "%s%d%s of your media attachments have been smushed."
900
  msgstr ""
901
 
902
+ #: lib/class-wp-smush-ui.php:780
903
  msgid "Stop current bulk smush process."
904
  msgstr ""
905
 
906
+ #: lib/class-wp-smush-ui.php:817
907
  #, php-format
908
  msgid "%s, you have %s%s%d%s attachment%s that needs re-compressing!"
909
  msgid_plural "%s, you have %s%s%d%s attachments%s that need re-compressing!"
910
  msgstr[0] ""
911
  msgstr[1] ""
912
 
913
+ #: lib/class-wp-smush-ui.php:818
914
  msgid "Skip re-smushing the images"
915
  msgstr ""
916
 
917
+ #: lib/class-wp-smush-ui.php:838
918
  msgid "Your settings have been updated!"
919
  msgstr ""
920
 
921
+ #: lib/class-wp-smush-ui.php:871
922
+ msgid "DASHBOARD"
 
 
 
 
923
  msgstr ""
924
 
925
+ #: lib/class-wp-smush-ui.php:873
926
  #, php-format
927
  msgid ""
928
  "Automatic smushing is %senabled%s. Newly uploaded images will be "
929
  "automagically compressed."
930
  msgstr ""
931
 
932
+ #: lib/class-wp-smush-ui.php:873
933
  #, php-format
934
  msgid ""
935
  "Automatic smushing is %sdisabled%s. Newly uploaded images will need to be "
936
  "manually smushed."
937
  msgstr ""
938
 
939
+ #: lib/class-wp-smush-ui.php:921
940
  msgid "Thanks for installing Smush. We hope you like it!"
941
  msgstr ""
942
 
943
+ #: lib/class-wp-smush-ui.php:922
944
  msgid ""
945
  "And hey, if you do, you can join WPMU DEV for a free 30 day trial and get "
946
  "access to even more features!"
947
  msgstr ""
948
 
949
+ #: lib/class-wp-smush-ui.php:923 lib/class-wp-smush-ui.php:927
950
  msgid "Try Smush Pro Free"
951
  msgstr ""
952
 
953
+ #: lib/class-wp-smush-ui.php:925
954
  msgid "Thanks for upgrading Smush!"
955
  msgstr ""
956
 
957
+ #: lib/class-wp-smush-ui.php:976
958
  #, php-format
959
  msgid ""
960
+ "Did you know Smush Pro delivers up to 2x better compression, allows you to "
961
+ "smush your originals and removes any bulk smushing limits? – %sTry it "
962
  "absolutely FREE%s"
963
  msgstr ""
964
 
965
+ #: lib/class-wp-smush-ui.php:976 lib/class-wp-smush-ui.php:1001
966
+ msgid "Try Smush Pro for FREE"
967
  msgstr ""
968
 
969
+ #: lib/class-wp-smush-ui.php:1001
970
  #, php-format
971
  msgid ""
972
  "Smush Pro gives you all these extra settings and absolutely no limits on "
975
  "%s"
976
  msgstr ""
977
 
978
+ #: lib/class-wp-smush-ui.php:1024
979
  msgid "Validating.."
980
  msgstr ""
981
 
982
+ #: lib/class-wp-smush-ui.php:1026
983
  #, php-format
984
  msgid ""
985
  "It looks like Smush couldn’t verify your WPMU DEV membership so Pro features "
987
  "%s or get in touch with our %ssupport team%s."
988
  msgstr ""
989
 
990
+ #: lib/class-wp-smush-ui.php:1048
991
  msgid "UPDATE SETTINGS"
992
  msgstr ""
993
 
994
+ #: lib/class-wp-smush-ui.php:1050
995
  msgid "Smush will automatically check for any images that need re-smushing."
996
  msgstr ""
997
 
998
+ #: lib/class-wp-smush-ui.php:1076
999
  msgid ""
1000
  "Smush settings were updated, performing a quick scan to check if any of the "
1001
  "images need to be Smushed again."
1002
  msgstr ""
1003
 
1004
+ #: lib/class-wp-smush-ui.php:1097
1005
  #, php-format
1006
  msgid ""
1007
  "Every time you upload an image to your site, WordPress generates a resized "
1011
  "optimized:%s"
1012
  msgstr ""
1013
 
1014
+ #: lib/class-wp-smush-ui.php:1142
1015
  msgid "Max width"
1016
  msgstr ""
1017
 
1018
+ #: lib/class-wp-smush-ui.php:1145
1019
  msgid "Max height"
1020
  msgstr ""
1021
 
1022
+ #: lib/class-wp-smush-ui.php:1148
1023
  #, php-format
1024
  msgid ""
1025
  "Currently, your largest image size is set at %s%dpx wide %s %dpx high%s."
1026
  msgstr ""
1027
 
1028
+ #: lib/class-wp-smush-ui.php:1149
1029
  msgid ""
1030
  "Just to let you know, the width you've entered is less than your largest "
1031
  "image and may result in pixelation."
1032
  msgstr ""
1033
 
1034
+ #: lib/class-wp-smush-ui.php:1150
1035
  msgid ""
1036
  "Just to let you know, the height you’ve entered is less than your largest "
1037
  "image and may result in pixelation."
1038
  msgstr ""
1039
 
1040
+ #: lib/class-wp-smush-ui.php:1152
1041
+ msgid ""
1042
+ "Note: Image resizing happens automatically when you upload attachments. This "
1043
+ "setting does not apply to images smushed using Directory Smush feature. To "
1044
+ "support retina devices, we recommend using 2x the dimensions of your image "
1045
+ "size."
1046
+ msgstr ""
1047
+
1048
+ #: lib/class-wp-smush-ui.php:1211
1049
  msgid ""
1050
  "Note: This data, called EXIF, adds to the size of the image. While this "
1051
  "information might be important to photographers, it’s unnecessary for most "
1052
  "users and safe to remove."
1053
  msgstr ""
1054
 
1055
+ #: lib/class-wp-smush-ui.php:1214
1056
  msgid ""
1057
  "Note: Any PNGs with transparency will be ignored. Smush will only convert "
1058
  "PNGs if it results in a smaller file size. The resulting file will have a "
1060
  "contain the original PNG filename will need to be updated."
1061
  msgstr ""
1062
 
1063
+ #: lib/class-wp-smush-ui.php:1217
1064
  msgid ""
1065
  "Note: For this process to happen automatically you need automatic smushing "
1066
  "enabled."
1067
  msgstr ""
1068
 
1069
+ #: lib/class-wp-smush-ui.php:1237
1070
  msgid "GET SMUSH PRO"
1071
  msgstr ""
1072
 
1073
+ #: lib/class-wp-smush-ui.php:1237 lib/class-wp-smush-ui.php:1267
1074
  msgid "LEARN MORE"
1075
  msgstr ""
1076
 
1077
+ #: lib/class-wp-smush-ui.php:1238
1078
  msgid "Here’s what you’ll get by uprading to Smush Pro."
1079
  msgstr ""
1080
 
1081
+ #: lib/class-wp-smush-ui.php:1242
1082
  msgid "Double the compression"
1083
  msgstr ""
1084
 
1085
+ #: lib/class-wp-smush-ui.php:1243
1086
  msgid ""
1087
  "Optimize images 2x more than regular smushing and with no visible loss in "
1088
  "quality using Smush’s intelligent multi-pass lossy compression."
1089
  msgstr ""
1090
 
1091
+ #: lib/class-wp-smush-ui.php:1247
1092
  msgid "No limits"
1093
  msgstr ""
1094
 
1095
+ #: lib/class-wp-smush-ui.php:1248
1096
  msgid ""
1097
  "The free version allows you to Smush up to 1Mb images, and 50 at a time. The "
1098
  "Pro version releases all those limits so you can smush all the things."
1099
  msgstr ""
1100
 
1101
+ #: lib/class-wp-smush-ui.php:1252
1102
  msgid "Include your originals"
1103
  msgstr ""
1104
 
1105
+ #: lib/class-wp-smush-ui.php:1253
1106
  msgid ""
1107
  "The free version of Smush only compresses your automatically generated image "
1108
  "thumbnails. With Pro you can compress your original size images too - in "
1109
  "case you want to use them in your theme."
1110
  msgstr ""
1111
 
1112
+ #: lib/class-wp-smush-ui.php:1257
1113
  msgid "Convert PNGs to JPEGs"
1114
  msgstr ""
1115
 
1116
+ #: lib/class-wp-smush-ui.php:1258
1117
  msgid ""
1118
  "If any of your non-transparent PNGs can be made smaller by converting to "
1119
  "JPEG, Smush will automatically convert them to JPEGs so they load faster for "
1120
  "your visitors."
1121
  msgstr ""
1122
 
1123
+ #: lib/class-wp-smush-ui.php:1262
1124
  msgid "Integration with NextGen Gallery"
1125
  msgstr ""
1126
 
1127
+ #: lib/class-wp-smush-ui.php:1263
1128
  msgid ""
1129
  "Using the NextGen Gallery plugin? The Pro version allows you to compress "
1130
  "images directly through NextGen Gallery’s settings."
1131
  msgstr ""
1132
 
1133
+ #: lib/class-wp-smush-ui.php:1266
1134
  #, php-format
1135
  msgid ""
1136
  "Get all of this including 200% faster smushing, Amazon S3 support and heaps "
1137
  "more as part of a WPMU DEV membership."
1138
  msgstr ""
1139
 
1140
+ #: lib/class-wp-smush.php:224
1141
  msgid "File path is empty"
1142
  msgstr ""
1143
 
1144
+ #: lib/class-wp-smush.php:227
1145
  #, php-format
1146
  msgid "Could not find %s"
1147
  msgstr ""
1148
 
1149
+ #: lib/class-wp-smush.php:230
1150
  #, php-format
1151
  msgid "%s is not writable"
1152
  msgstr ""
1153
 
1154
+ #: lib/class-wp-smush.php:240
1155
  #, php-format
1156
  msgid "Skipped (%s), image not found. Attachment: %s"
1157
  msgstr ""
1158
 
1159
+ #: lib/class-wp-smush.php:243
1160
  #, php-format
1161
  msgid "Skipped (%s), size limit exceeded. Attachment: %s"
1162
  msgstr ""
1163
 
1164
+ #: lib/class-wp-smush.php:261
1165
  msgid "Unknown API error"
1166
  msgstr ""
1167
 
1168
+ #: lib/class-wp-smush.php:744
1169
  msgid ""
1170
  "Skipped due to a timeout error. You can increase the request timeout to make "
1171
  "sure Smush has enough time to process larger files. "
1172
  "`define('WP_SMUSH_API_TIMEOUT', 150);`."
1173
  msgstr ""
1174
 
1175
+ #: lib/class-wp-smush.php:747
1176
  #, php-format
1177
  msgid "Error posting to API: %s"
1178
  msgstr ""
1179
 
1180
+ #: lib/class-wp-smush.php:754
1181
  #, php-format
1182
  msgid "Error posting to API: %s %s"
1183
  msgstr ""
1184
 
1185
+ #: lib/class-wp-smush.php:771
1186
  msgid "Smush data corrupted, try again."
1187
  msgstr ""
1188
 
1189
+ #: lib/class-wp-smush.php:797
1190
  msgid "Image couldn't be smushed"
1191
  msgstr ""
1192
 
1193
+ #: lib/class-wp-smush.php:1044
1194
  #, php-format
1195
  msgid "%d images reduced "
1196
  msgstr ""
1197
 
1198
+ #: lib/class-wp-smush.php:1044
1199
  msgid "Reduced "
1200
  msgstr ""
1201
 
1202
+ #: lib/class-wp-smush.php:1048
1203
  #, php-format
1204
  msgid "by %s %s"
1205
  msgstr ""
1206
 
1207
+ #: lib/class-wp-smush.php:1054
1208
  #, php-format
1209
  msgid "<br /> Image Size: %s"
1210
  msgstr ""
1211
 
1212
+ #: lib/class-wp-smush.php:1084
1213
  msgid "Detailed stats for all the image sizes"
1214
  msgstr ""
1215
 
1216
+ #: lib/class-wp-smush.php:1084
1217
+ #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:231
1218
  msgid "Smush stats"
1219
  msgstr ""
1220
 
1221
+ #: lib/class-wp-smush.php:1131
1222
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:288
1223
  msgid "Not processed"
1224
  msgstr ""
1225
 
1226
+ #: lib/class-wp-smush.php:1451
1227
  #, php-format
1228
  msgid ""
1229
  "When you upload an image to WordPress it automatically creates %s thumbnail "
1232
  "site we don’t Smush them. Pro users can override this."
1233
  msgstr ""
1234
 
1235
+ #: lib/class-wp-smush.php:1454
1236
  msgid ""
1237
  "Image couldn't be smushed as it exceeded the 1Mb size limit, Pro users can "
1238
  "smush images with size up to 32Mb."
1239
  msgstr ""
1240
 
1241
+ #: lib/class-wp-smush.php:1456
1242
  msgid " Skipped"
1243
  msgstr ""
1244
 
1245
+ #: lib/class-wp-smush.php:1478
1246
+ #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:463
1247
  msgid "Image size"
1248
  msgstr ""
1249
 
1250
+ #: lib/class-wp-smush.php:1479
1251
+ #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:464
1252
  msgid "Savings"
1253
  msgstr ""
1254
 
1255
+ #: lib/class-wp-smush.php:1730
1256
  msgid "Restore original image."
1257
  msgstr ""
1258
 
1259
+ #: lib/class-wp-smush.php:1730
1260
  msgid "Restore image"
1261
  msgstr ""
1262
 
1263
+ #: lib/class-wp-smush.php:1778
1264
  msgid "Smush image including original file."
1265
  msgstr ""
1266
 
1267
+ #: lib/class-wp-smush.php:1778
1268
  msgid "Resmush image"
1269
  msgstr ""
1270
 
1271
+ #: lib/class-wp-smush.php:2544
1272
  msgid "Plugin: Smush"
1273
  msgstr ""
1274
 
1275
+ #: lib/class-wp-smush.php:2546
1276
  msgid ""
1277
  "Note: Smush does not interact with end users on your website. The only input "
1278
  "option Smush has is to a newsletter subscription for site admins only. If "
1280
  "use the information below."
1281
  msgstr ""
1282
 
1283
+ #: lib/class-wp-smush.php:2548
1284
  msgid ""
1285
  "Smush sends images to the WPMU DEV servers to optimize them for web use. "
1286
  "This includes the transfer of EXIF data. The EXIF data will either be "
1287
  "stripped or returned as it is. It is not stored on the WPMU DEV servers."
1288
  msgstr ""
1289
 
1290
+ #: lib/class-wp-smush.php:2553
1291
  msgid ""
1292
  "Smush uses a third-party email service (Drip) to send informational emails "
1293
  "to the site administrator. The administrator's email address is sent to Drip "
1295
  "collected by Drip."
1296
  msgstr ""
1297
 
1298
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:416
 
 
 
 
1299
  #, php-format
1300
  msgid ""
1301
  "We haven’t found any images in your %sgallery%s yet, so there’s no smushing "
1302
  "to be done! Once you upload images, reload this page and start playing!"
1303
  msgstr ""
1304
 
1305
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:450
1306
  #, php-format
1307
  msgid ""
1308
  "Enable Super-smush in the %sSettings%s area to get even more savings with "
1309
  "almost no visible drop in quality."
1310
  msgstr ""
1311
 
1312
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:465
1313
  #, php-format
1314
  msgid "Smush individual images via your %sManage Galleries%s section"
1315
  msgstr ""
1316
 
1317
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:465
1318
  msgid "Manage Galleries"
1319
  msgstr ""
1320
 
1321
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:521
1322
  msgid "Super-smushed images"
1323
  msgstr ""
1324
 
1325
+ #: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:529
1326
  #, php-format
1327
  msgid "%sDISABLED%s"
1328
  msgstr ""
1333
  "`WP_SMUSH_API_TIMEOUT`."
1334
  msgstr ""
1335
 
1336
+ #: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:200
1337
  #, php-format
1338
  msgid "Reduced by %s ( %01.1f%% )"
1339
  msgstr ""
1342
  msgid "Get Fast"
1343
  msgstr ""
1344
 
1345
+ #: wp-smush.php:213
1346
+ msgid "Smush Free was deactivated. You have Smush Pro active!"
1347
  msgstr ""
1348
 
1349
  #. Plugin URI of the plugin/theme
lib/class-wp-smush-admin.php CHANGED
@@ -116,16 +116,14 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
116
  'post',
117
  'post-new',
118
  'upload',
119
- 'settings_page_wp-smush-network',
120
- 'media_page_wp-smush-bulk',
121
- 'media_page_wp-smush-all'
122
  );
123
 
124
  public $plugin_pages = array(
125
  'gallery_page_wp-smush-nextgen-bulk',
126
- 'settings_page_wp-smush-network',
127
- 'media_page_wp-smush-bulk',
128
- 'media_page_wp-smush-all'
129
  );
130
 
131
  public $basic_features = array(
@@ -220,12 +218,14 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
220
  */
221
  add_action( 'wp_ajax_hide_api_message', array( $this, 'hide_api_message' ) );
222
 
223
- //Return Smush status for attachment opened in Grid view
224
- add_action( 'wp_ajax_smush_get_attachment_details', array( $this, 'smush_send_status' ) );
225
 
226
  //Send smush stats
227
  add_action( 'wp_ajax_get_stats', array( $this, 'get_stats' ) );
228
 
 
 
 
229
  }
230
 
231
  function init_settings() {
@@ -258,7 +258,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
258
  'resize' => array(
259
  'label' => esc_html__( 'Resize my full size images', 'wp-smushit' ),
260
  'short_label' => esc_html__( 'Full size images', 'wp-smushit' ),
261
- 'desc' => esc_html__( 'Set a maximum height and width for all images uploaded to your site so that any unnecessarily large images are automatically resized before they are added to the media gallery. This setting does not apply to images smushed using Directory Smush feature.', 'wp-smushit' )
262
  ),
263
  'backup' => array(
264
  'label' => esc_html__( 'Make a copy of my full size images', 'wp-smushit' ),
@@ -288,22 +288,14 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
288
  * Add Bulk option settings page
289
  */
290
  function screen() {
291
- global $admin_page_suffix, $wpsmush_bulkui;
292
-
293
- //Bulk Smush Page for each site
294
- $admin_page_suffix = add_media_page( 'Bulk WP Smush', 'WP Smush', 'edit_others_posts', 'wp-smush-bulk', array(
295
- $wpsmush_bulkui,
296
- 'ui'
297
- ) );
298
-
299
- //Network Settings Page
300
- $page = 'settings.php';
301
- $cap = 'manage_network_options';
302
 
303
- add_submenu_page( $page, 'WP Smush', 'WP Smush', $cap, 'wp-smush', array(
 
 
304
  $wpsmush_bulkui,
305
  'ui'
306
- ) );
307
 
308
  //For Nextgen gallery Pages, check later in enqueue function
309
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
@@ -345,36 +337,55 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
345
  */
346
  function enqueue() {
347
 
348
- $current_screen = get_current_screen();
349
- $current_page = $current_screen->base;
 
 
 
350
 
351
- /**
352
- * Allows to disable enqueuing smush files on a particular page
353
- */
354
- $enqueue_smush = apply_filters( 'wp_smush_enqueue', true );
355
 
356
  //Load js and css on all admin pages, in order t display install/upgrade notice
357
  // And If upgrade/install message is dismissed or for pro users, Do not enqueue script
358
  if ( get_option( 'wp-smush-hide_upgrade_notice' ) || get_site_option( 'wp-smush-hide_upgrade_notice' ) || $this->validate_install() ) {
359
  /** @var $pages List of screens where script needs to be loaded */
360
 
361
- //Do not enqueue, unless it is one of the required screen
362
- if ( ! $enqueue_smush || ! in_array( $current_page, $this->pages ) ) {
363
 
364
- return;
365
  }
366
  }
 
 
 
 
 
 
 
 
 
367
  $this->load_shared_ui( $current_page );
368
  wp_enqueue_script( 'wp-smushit-admin-js' );
369
 
370
  //Style
371
  wp_enqueue_style( 'wp-smushit-admin-css' );
372
 
 
 
373
  //Load on Smush all page only
374
- if ( 'media_page_wp-smush-bulk' == $current_page ) {
375
  //Load Jquery tree on specified page
376
  wp_enqueue_script( 'jqft-js' );
377
  wp_enqueue_style( 'jqft-css' );
 
 
 
 
 
 
 
 
378
  }
379
 
380
  // localize translatable strings for js
@@ -415,7 +426,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
415
  wp_localize_script( $handle, 'wp_smush_msgs', $wp_smush_msgs );
416
 
417
  //Load the stats on selected screens only
418
- if ( $current_page == 'media_page_wp-smush-bulk' ) {
419
 
420
  //Get resmush list, If we have a resmush list already, localize those ids
421
  if ( $resmush_ids = get_option( "wp-smush-resmush-list" ) ) {
@@ -640,10 +651,10 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
640
 
641
  if ( ! $send_error ) {
642
  //Proceed only if Smushing Transient is not set for the given attachment id
643
- if ( ! get_transient( 'smush-in-progress-' . $attachment_id ) ) {
644
 
645
  //Set a transient to avoid multiple request
646
- set_transient( 'smush-in-progress-' . $attachment_id, true, WP_SMUSH_TIMEOUT );
647
 
648
  $original_meta = wp_get_attachment_metadata( $attachment_id, true );
649
 
@@ -673,7 +684,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
673
  }
674
 
675
  //Delete Transient
676
- delete_transient( 'smush-in-progress-' . $attachment_id );
677
  }
678
 
679
  $smush_data = get_post_meta( $attachment_id, $this->smushed_meta_key, true );
@@ -779,6 +790,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
779
  ) );
780
  }
781
 
 
782
  //Pass on the attachment id to smush single function
783
  $this->smush_single( $attachemnt_id );
784
  }
@@ -793,8 +805,8 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
793
  */
794
  function smush_single( $attachment_id, $return = false ) {
795
 
796
- //If the smushing transient is already set, return the status
797
- if ( get_transient( 'smush-in-progress-' . $attachment_id ) || get_transient( "wp-smush-restore-$attachment_id" ) ) {
798
  //Get the button status
799
  $status = $this->set_status( $attachment_id, false, true );
800
  if ( $return ) {
@@ -805,9 +817,9 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
805
  }
806
 
807
  //Set a transient to avoid multiple request
808
- set_transient( 'smush-in-progress-' . $attachment_id, true, WP_SMUSH_TIMEOUT );
809
 
810
- global $WpSmush, $wpsmush_pngjpg, $wpsmush_helper;
811
 
812
  $attachment_id = absint( (int) ( $attachment_id ) );
813
 
@@ -835,16 +847,16 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
835
  $original_meta = ! empty( $updated_meta ) ? $updated_meta : $original_meta;
836
 
837
  //Smush the image
838
- $smush = $WpSmush->resize_from_meta_data( $original_meta, $attachment_id );
839
 
840
  //Update the details, after smushing, so that latest image is used in hook
841
  wp_update_attachment_metadata( $attachment_id, $original_meta );
842
 
843
  //Get the button status
844
- $status = $WpSmush->set_status( $attachment_id, false, true );
845
 
846
  //Delete the transient after attachment meta is updated
847
- delete_transient( 'smush-in-progress-' . $attachment_id );
848
 
849
  //Send Json response if we are not suppose to return the results
850
 
@@ -1149,9 +1161,9 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1149
  global $WpSmush;
1150
 
1151
  //Show Temporary Status, For Async Optimisation, No Good workaround
1152
- if ( ! get_transient( "wp-smush-restore-$id" ) && ! empty( $_POST['action'] ) && 'upload-attachment' == $_POST['action'] && $WpSmush->is_auto_smush_enabled() ) {
1153
  // the status
1154
- $status_txt = __( 'Smushing in progress..', 'wp-smushit' );
1155
 
1156
  // we need to show the smush button
1157
  $show_button = false;
@@ -1177,7 +1189,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1177
  */
1178
  function settings_link( $links, $url_only = false ) {
1179
 
1180
- $settings_page = is_multisite() ? network_admin_url( 'settings.php?page=wp-smush' ) : admin_url( 'upload.php?page=wp-smush-bulk' );
1181
  $settings = '<a href="' . $settings_page . '">' . __( 'Settings', 'wp-smushit' ) . '</a>';
1182
 
1183
  //Return Only settings page link
@@ -1203,17 +1215,17 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1203
 
1204
  //Return, If a pro user, or not super admin, or don't have the admin privilleges
1205
  if ( $this->validate_install() || ! current_user_can( 'edit_others_posts' ) || ! is_super_admin() ) {
1206
- return;
1207
  }
1208
 
1209
  //No need to show it on bulk smush
1210
- if ( isset( $_GET['page'] ) && 'wp-smush-bulk' == $_GET['page'] ) {
1211
- return;
1212
  }
1213
 
1214
  //Return if notice is already dismissed
1215
  if ( get_option( 'wp-smush-hide_upgrade_notice' ) || get_site_option( 'wp-smush-hide_upgrade_notice' ) ) {
1216
- return;
1217
  }
1218
 
1219
  $install_type = get_site_option( 'wp-smush-install-type', false );
@@ -1373,6 +1385,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1373
  /**
1374
  * Scans all the smushed attachments to check if they need to be resmushed as per the
1375
  * current settings, as user might have changed one of the configurations "Lossy", "Keep Original", "Preserve Exif"
 
1376
  */
1377
  function scan_images() {
1378
 
@@ -1382,6 +1395,9 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1382
 
1383
  $resmush_list = array();
1384
 
 
 
 
1385
  //Save settings only if networkwide settings are disabled
1386
  if ( ( ! is_multisite() || ! $wpsmush_settings->is_network_enabled() ) && ( ! isset( $_REQUEST['process_settings'] ) || 'false' != $_REQUEST['process_settings'] ) ) {
1387
  //Save Settings
@@ -1389,7 +1405,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1389
  }
1390
 
1391
  //If there aren't any images in the library, return the notice
1392
- if ( 0 == $wpsmush_db->get_media_attachments( true ) ) {
1393
  $notice = esc_html__( "We haven’t found any images in your media library yet so there’s no smushing to be done! Once you upload images, reload this page and start playing!", "wp-smushit" );
1394
  $resp = '<div class="wp-smush-notice wp-smush-resmush-message" tabindex="0"><i class="icon-fi-check-tick"></i> ' . $notice . '
1395
  <i class="icon-fi-close"></i>
@@ -1410,9 +1426,6 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1410
  <i class="icon-fi-close"></i>
1411
  </div>';
1412
 
1413
- //Scanning for NextGen or Media Library
1414
- $type = isset( $_REQUEST['type'] ) ? sanitize_text_field( $_REQUEST['type'] ) : '';
1415
-
1416
  //If a user manually runs smush check
1417
  $return_ui = isset( $_REQUEST['get_ui'] ) && 'true' == $_REQUEST['get_ui'] ? true : false;
1418
 
@@ -1431,7 +1444,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1431
 
1432
  //Intialize NextGen Stats
1433
  if ( 'nextgen' == $type && is_object( $wpsmushnextgenadmin ) && empty( $wpsmushnextgenadmin->remaining_count ) ) {
1434
- $wpsmushnextgenadmin->setup_stats();
1435
  }
1436
 
1437
  $key = 'nextgen' == $type ? 'wp-smush-nextgen-resmush-list' : 'wp-smush-resmush-list';
@@ -1460,7 +1473,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1460
 
1461
  }
1462
 
1463
- $image_count = $super_smushed_count = $smushed_count = 0;
1464
  //Check if any of the smushed image needs to be resmushed
1465
  if ( ! empty( $attachments ) && is_array( $attachments ) ) {
1466
  $stats = array(
@@ -1527,6 +1540,10 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1527
 
1528
  //Increase the smushed count
1529
  $smushed_count += 1;
 
 
 
 
1530
 
1531
  //Get the image count
1532
  $image_count += ( ! empty( $smush_data['sizes'] ) && is_array( $smush_data['sizes'] ) ) ? sizeof( $smush_data['sizes'] ) : 0;
@@ -1548,35 +1565,26 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1548
  }
1549
  }
1550
  }
1551
- }
1552
 
1553
  //Check for Upfront images that needs to be smushed
1554
  if ( $upfront_active && 'nextgen' != $type ) {
1555
- $upfront_attachments = $wpsmush_db->get_upfront_images( $resmush_list );
1556
- if ( ! empty( $upfront_attachments ) && is_array( $upfront_attachments ) ) {
1557
- foreach ( $upfront_attachments as $u_attachment_id ) {
1558
- if ( ! in_array( $u_attachment_id, $resmush_list ) ) {
1559
- //Check if not smushed
1560
- $upfront_images = get_post_meta( $u_attachment_id, 'upfront_used_image_sizes', true );
1561
- if ( ! empty( $upfront_images ) && is_array( $upfront_images ) ) {
1562
- //Iterate over all the images
1563
- foreach ( $upfront_images as $image ) {
1564
- //If any of the element image is not smushed, add the id to resmush list
1565
- //and skip to next image
1566
- if ( empty( $image['is_smushed'] ) || 1 != $image['is_smushed'] ) {
1567
- $resmush_list[] = $u_attachment_id;
1568
- break;
1569
- }
1570
- }
1571
- }
1572
- }
1573
- }
1574
- }
1575
  }//End Of Upfront loop
1576
 
1577
  //Store the resmush list in Options table
1578
  update_option( $key, $resmush_list, false );
1579
  }
 
 
 
 
 
 
 
 
 
 
1580
 
1581
  //Delete resmush list if empty
1582
  if ( empty( $resmush_list ) ) {
@@ -1614,19 +1622,23 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1614
  </div>';
1615
  }
1616
 
1617
- //Append the directory smush stats
1618
- $dir_smush_stats = get_option( 'dir_smush_stats' );
1619
- if ( ! empty( $dir_smush_stats ) && is_array( $dir_smush_stats ) ) {
 
 
 
1620
 
1621
- if ( ! empty( $dir_smush_stats['dir_smush'] ) && ! empty( $dir_smush_stats['optimised'] ) ) {
1622
- $dir_smush_stats = $dir_smush_stats['dir_smush'];
1623
- $image_count += $dir_smush_stats['optimised'];
1624
- }
1625
 
1626
- //Add directory smush stats if not empty
1627
- if ( ! empty( $dir_smush_stats['image_size'] ) && ! empty( $dir_smush_stats['orig_size'] ) ) {
1628
- $stats['size_before'] += $dir_smush_stats['orig_size'];
1629
- $stats['size_after'] += $dir_smush_stats['image_size'];
 
1630
  }
1631
  }
1632
 
@@ -1637,10 +1649,11 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1637
  'count_image' => $image_count,
1638
  'count_supersmushed' => $super_smushed_count,
1639
  'count_smushed' => $smushed_count,
 
1640
  'size_before' => $stats['size_before'],
1641
  'size_after' => $stats['size_after'],
1642
- 'savings_resize' => $stats['savings_resize'],
1643
- 'savings_conversion' => $stats['savings_conversion']
1644
  ) : array();
1645
 
1646
  //Include the count
@@ -1811,13 +1824,14 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1811
  if ( 'nextgen' != $_POST['type'] ) {
1812
  $resmush_list = get_option( $key );
1813
  if ( ! empty( $resmush_list ) && is_array( $resmush_list ) ) {
1814
- $stats = $wpsmush_db->get_savings_for_attachments( $resmush_list );
1815
  }
1816
  } else {
1817
- //For Nextgen. Get the stats
1818
- $stats = $wpsmushnextgenstats->get_smush_stats();
 
1819
 
1820
- $stats['count_images'] = $wpsmushnextgenadmin->smushed_count;
1821
  }
1822
 
1823
  //Delete the resmush list
@@ -1982,7 +1996,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1982
 
1983
  //Do not display the notice on Bulk Smush Screen
1984
  global $current_screen;
1985
- if ( ! empty( $current_screen->base ) && ( 'media_page_wp-smush-bulk' == $current_screen->base || 'gallery_page_wp-smush-nextgen-bulk' == $current_screen->base || 'settings_page_wp-smush-network' == $current_screen->base ) ) {
1986
  return true;
1987
  }
1988
 
@@ -1994,11 +2008,11 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
1994
  ),
1995
  $this->upgrade_url
1996
  );
1997
- $settings_link = is_multisite() ? network_admin_url( 'settings.php?page=wp-smush' ) : admin_url( 'upload.php?page=wp-smush-bulk' );
1998
 
1999
  $settings_link = '<a href="' . $settings_link . '" title="' . esc_html__( "Review your setting now.", "wp-smushit" ) . '">';
2000
- $upgrade_link = '<a href="' . esc_url( $upgrade_url ) . '" title="' . esc_html__( "WP Smush Pro", "wp-smushit" ) . '">';
2001
- $message_s = sprintf( esc_html__( "Welcome to the newest version of WP Smush! In this update we've added the ability to bulk smush images in directories outside your uploads folder.", 'wp-smushit' ), WP_SMUSH_VERSION, '<strong>', '</strong>' );
2002
 
2003
  //Message for network admin
2004
  $message_s .= is_multisite() ? sprintf( esc_html__( " And as a multisite user, you can manage %sSmush settings%s globally across all sites!", 'wp-smushit' ), $settings_link, '</a>' ) : '';
@@ -2162,6 +2176,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
2162
 
2163
  //Check the last settings stored in db
2164
  $settings = $wpsmush_settings->get_setting( WP_SMUSH_PREFIX . 'last_settings', array() );
 
2165
 
2166
  //Available settings for free/pro version
2167
  $exclude = array(
@@ -2238,17 +2253,17 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
2238
  * Load media assets.
2239
  */
2240
  public function extend_media_modal() {
2241
- if ( ! wp_script_is( 'smush-media-view', 'enqueued' ) ) {
2242
- wp_enqueue_script( 'smush-media-view', WP_SMUSH_URL . 'assets/js/media.js', array(
2243
  'jquery',
2244
  'media-views',
2245
  'media-grid',
2246
  'wp-util',
2247
  ), $this->version, true );
2248
 
2249
- wp_localize_script( 'smush-media-view', 'smush_vars', array(
2250
  'strings' => array(
2251
- 'stats_label' => esc_html__( "Smush Stats", "wp-smushit" )
2252
  ),
2253
  'nonce' => array(
2254
  'get_smush_status' => wp_create_nonce( 'get-smush-status' ),
@@ -2258,22 +2273,23 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
2258
  }
2259
 
2260
  /**
2261
- * Return Smush status of an attachment
 
 
 
2262
  *
2263
- * @param $id
2264
  */
2265
- function smush_send_status() {
2266
- if ( ! isset( $_POST['id'] ) ) {
2267
- return;
2268
  }
2269
 
2270
- check_ajax_referer( 'get-smush-status', '_nonce' );
2271
-
2272
- $id = intval( $_POST['id'] );
2273
-
2274
  //Validate nonce
2275
- $status = $this->smush_status( $id );
2276
- wp_send_json_success( $status );
 
 
2277
  }
2278
 
2279
  /**
@@ -2298,6 +2314,64 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
2298
  );
2299
  wp_send_json_success( $stats );
2300
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2301
  }
2302
 
2303
  global $wpsmushit_admin;
116
  'post',
117
  'post-new',
118
  'upload',
119
+ 'toplevel_page_smush-network',
120
+ 'toplevel_page_smush',
 
121
  );
122
 
123
  public $plugin_pages = array(
124
  'gallery_page_wp-smush-nextgen-bulk',
125
+ 'toplevel_page_smush-network',
126
+ 'toplevel_page_smush'
 
127
  );
128
 
129
  public $basic_features = array(
218
  */
219
  add_action( 'wp_ajax_hide_api_message', array( $this, 'hide_api_message' ) );
220
 
221
+ add_filter('wp_prepare_attachment_for_js', array( $this, 'smush_send_status' ), 99, 3 );
 
222
 
223
  //Send smush stats
224
  add_action( 'wp_ajax_get_stats', array( $this, 'get_stats' ) );
225
 
226
+ //Load js and css on pages with Media Uploader - WP Enqueue Media
227
+ add_action('wp_enqueue_media', array( $this, 'enqueue') );
228
+
229
  }
230
 
231
  function init_settings() {
258
  'resize' => array(
259
  'label' => esc_html__( 'Resize my full size images', 'wp-smushit' ),
260
  'short_label' => esc_html__( 'Full size images', 'wp-smushit' ),
261
+ 'desc' => esc_html__( 'Save a ton of space by not storing over-sized images on your server. Set a maximum height and width for all images uploaded to your site so that any unnecessarily large images are automatically resized before they are added to the media gallery.', 'wp-smushit' )
262
  ),
263
  'backup' => array(
264
  'label' => esc_html__( 'Make a copy of my full size images', 'wp-smushit' ),
288
  * Add Bulk option settings page
289
  */
290
  function screen() {
291
+ global $wpsmush_bulkui;
 
 
 
 
 
 
 
 
 
 
292
 
293
+ $cap = is_multisite() ? 'manage_network_options' : 'manage_options';
294
+ $title = $this->validate_install() ? esc_html__( "Smush Pro", "wp-smushit" ) : esc_html__( "Smush", "wp-smushit" );
295
+ add_menu_page( $title, $title, $cap, 'smush', array(
296
  $wpsmush_bulkui,
297
  'ui'
298
+ ), $this->get_menu_icon() );
299
 
300
  //For Nextgen gallery Pages, check later in enqueue function
301
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
337
  */
338
  function enqueue() {
339
 
340
+ $current_page = '';
341
+ if ( function_exists( 'get_current_screen' ) ) {
342
+ $current_screen = get_current_screen();
343
+ $current_page = !empty( $current_screen ) ? $current_screen->base : $current_page;
344
+ }
345
 
346
+ $enqueue_smush = true;
 
 
 
347
 
348
  //Load js and css on all admin pages, in order t display install/upgrade notice
349
  // And If upgrade/install message is dismissed or for pro users, Do not enqueue script
350
  if ( get_option( 'wp-smush-hide_upgrade_notice' ) || get_site_option( 'wp-smush-hide_upgrade_notice' ) || $this->validate_install() ) {
351
  /** @var $pages List of screens where script needs to be loaded */
352
 
353
+ //Do not enqueue, unless it is one of the required screen, or not in wordpress backend
354
+ if ( empty( $current_page ) || ! is_admin() || ( ! in_array( $current_page, $this->pages ) && ! did_action( 'wp_enqueue_media' ) ) ) {
355
 
356
+ $enqueue_smush = false;
357
  }
358
  }
359
+ /**
360
+ * Allows to disable enqueuing smush files on a particular page
361
+ */
362
+ $enqueue_smush = apply_filters( 'wp_smush_enqueue', $enqueue_smush );
363
+
364
+ if ( ! $enqueue_smush ) {
365
+ return;
366
+ }
367
+
368
  $this->load_shared_ui( $current_page );
369
  wp_enqueue_script( 'wp-smushit-admin-js' );
370
 
371
  //Style
372
  wp_enqueue_style( 'wp-smushit-admin-css' );
373
 
374
+ $dir = defined('__DIR__') ? __DIR__ : dirname(__FILE__);
375
+
376
  //Load on Smush all page only
377
+ if ( 'toplevel_page_smush' == $current_page || 'toplevel_page_smush-network' == $current_page ) {
378
  //Load Jquery tree on specified page
379
  wp_enqueue_script( 'jqft-js' );
380
  wp_enqueue_style( 'jqft-css' );
381
+ wp_enqueue_style( 'wpmudev-sui', plugins_url( 'assets/shared-ui-2/css/admin.min.css', $dir ) );
382
+ wp_enqueue_script(
383
+ 'wpmudev-sui',
384
+ plugins_url( 'assets/shared-ui-2/js/admin.min.js', $dir ),
385
+ array( 'jquery' ),
386
+ null,
387
+ true
388
+ );
389
  }
390
 
391
  // localize translatable strings for js
426
  wp_localize_script( $handle, 'wp_smush_msgs', $wp_smush_msgs );
427
 
428
  //Load the stats on selected screens only
429
+ if ( $current_page == 'toplevel_page_smush' ) {
430
 
431
  //Get resmush list, If we have a resmush list already, localize those ids
432
  if ( $resmush_ids = get_option( "wp-smush-resmush-list" ) ) {
651
 
652
  if ( ! $send_error ) {
653
  //Proceed only if Smushing Transient is not set for the given attachment id
654
+ if ( ! get_option( 'smush-in-progress-' . $attachment_id, false ) ) {
655
 
656
  //Set a transient to avoid multiple request
657
+ update_option( 'smush-in-progress-' . $attachment_id, true );
658
 
659
  $original_meta = wp_get_attachment_metadata( $attachment_id, true );
660
 
684
  }
685
 
686
  //Delete Transient
687
+ delete_option( 'smush-in-progress-' . $attachment_id );
688
  }
689
 
690
  $smush_data = get_post_meta( $attachment_id, $this->smushed_meta_key, true );
790
  ) );
791
  }
792
 
793
+ $this->initialise();
794
  //Pass on the attachment id to smush single function
795
  $this->smush_single( $attachemnt_id );
796
  }
805
  */
806
  function smush_single( $attachment_id, $return = false ) {
807
 
808
+ //If the smushing option is already set, return the status
809
+ if ( get_option( 'smush-in-progress-' . $attachment_id, false ) || get_option( "wp-smush-restore-$attachment_id", false ) ) {
810
  //Get the button status
811
  $status = $this->set_status( $attachment_id, false, true );
812
  if ( $return ) {
817
  }
818
 
819
  //Set a transient to avoid multiple request
820
+ update_option( 'smush-in-progress-' . $attachment_id, true );
821
 
822
+ global $wpsmush_pngjpg, $wpsmush_helper;
823
 
824
  $attachment_id = absint( (int) ( $attachment_id ) );
825
 
847
  $original_meta = ! empty( $updated_meta ) ? $updated_meta : $original_meta;
848
 
849
  //Smush the image
850
+ $smush = $this->resize_from_meta_data( $original_meta, $attachment_id );
851
 
852
  //Update the details, after smushing, so that latest image is used in hook
853
  wp_update_attachment_metadata( $attachment_id, $original_meta );
854
 
855
  //Get the button status
856
+ $status = $this->set_status( $attachment_id, false, true );
857
 
858
  //Delete the transient after attachment meta is updated
859
+ delete_option( 'smush-in-progress-' . $attachment_id );
860
 
861
  //Send Json response if we are not suppose to return the results
862
 
1161
  global $WpSmush;
1162
 
1163
  //Show Temporary Status, For Async Optimisation, No Good workaround
1164
+ if ( ! get_option( "wp-smush-restore-$id", false ) && ! empty( $_POST['action'] ) && 'upload-attachment' == $_POST['action'] && $WpSmush->is_auto_smush_enabled() ) {
1165
  // the status
1166
+ $status_txt = '<p class="smush-status">'. __( 'Smushing in progress..', 'wp-smushit' ) . "</p>";
1167
 
1168
  // we need to show the smush button
1169
  $show_button = false;
1189
  */
1190
  function settings_link( $links, $url_only = false ) {
1191
 
1192
+ $settings_page = is_multisite() && is_network_admin() ? network_admin_url( 'admin.php?page=smush' ) : menu_page_url( 'smush', false );
1193
  $settings = '<a href="' . $settings_page . '">' . __( 'Settings', 'wp-smushit' ) . '</a>';
1194
 
1195
  //Return Only settings page link
1215
 
1216
  //Return, If a pro user, or not super admin, or don't have the admin privilleges
1217
  if ( $this->validate_install() || ! current_user_can( 'edit_others_posts' ) || ! is_super_admin() ) {
1218
+ return false;
1219
  }
1220
 
1221
  //No need to show it on bulk smush
1222
+ if ( isset( $_GET['page'] ) && 'smush' == $_GET['page'] ) {
1223
+ return false;
1224
  }
1225
 
1226
  //Return if notice is already dismissed
1227
  if ( get_option( 'wp-smush-hide_upgrade_notice' ) || get_site_option( 'wp-smush-hide_upgrade_notice' ) ) {
1228
+ return false;
1229
  }
1230
 
1231
  $install_type = get_site_option( 'wp-smush-install-type', false );
1385
  /**
1386
  * Scans all the smushed attachments to check if they need to be resmushed as per the
1387
  * current settings, as user might have changed one of the configurations "Lossy", "Keep Original", "Preserve Exif"
1388
+ * @todo: Needs some refactoring big time
1389
  */
1390
  function scan_images() {
1391
 
1395
 
1396
  $resmush_list = array();
1397
 
1398
+ //Scanning for NextGen or Media Library
1399
+ $type = isset( $_REQUEST['type'] ) ? sanitize_text_field( $_REQUEST['type'] ) : '';
1400
+
1401
  //Save settings only if networkwide settings are disabled
1402
  if ( ( ! is_multisite() || ! $wpsmush_settings->is_network_enabled() ) && ( ! isset( $_REQUEST['process_settings'] ) || 'false' != $_REQUEST['process_settings'] ) ) {
1403
  //Save Settings
1405
  }
1406
 
1407
  //If there aren't any images in the library, return the notice
1408
+ if ( 0 == $wpsmush_db->get_media_attachments( true ) && 'nextgen' != $type ) {
1409
  $notice = esc_html__( "We haven’t found any images in your media library yet so there’s no smushing to be done! Once you upload images, reload this page and start playing!", "wp-smushit" );
1410
  $resp = '<div class="wp-smush-notice wp-smush-resmush-message" tabindex="0"><i class="icon-fi-check-tick"></i> ' . $notice . '
1411
  <i class="icon-fi-close"></i>
1426
  <i class="icon-fi-close"></i>
1427
  </div>';
1428
 
 
 
 
1429
  //If a user manually runs smush check
1430
  $return_ui = isset( $_REQUEST['get_ui'] ) && 'true' == $_REQUEST['get_ui'] ? true : false;
1431
 
1444
 
1445
  //Intialize NextGen Stats
1446
  if ( 'nextgen' == $type && is_object( $wpsmushnextgenadmin ) && empty( $wpsmushnextgenadmin->remaining_count ) ) {
1447
+ $wpsmushnextgenadmin->setup_image_counts();
1448
  }
1449
 
1450
  $key = 'nextgen' == $type ? 'wp-smush-nextgen-resmush-list' : 'wp-smush-resmush-list';
1473
 
1474
  }
1475
 
1476
+ $image_count = $super_smushed_count = $smushed_count = $resized_count = 0;
1477
  //Check if any of the smushed image needs to be resmushed
1478
  if ( ! empty( $attachments ) && is_array( $attachments ) ) {
1479
  $stats = array(
1540
 
1541
  //Increase the smushed count
1542
  $smushed_count += 1;
1543
+ //Get the resized image count
1544
+ if( !empty( $resize_savings ) ) {
1545
+ $resized_count += 1;
1546
+ }
1547
 
1548
  //Get the image count
1549
  $image_count += ( ! empty( $smush_data['sizes'] ) && is_array( $smush_data['sizes'] ) ) ? sizeof( $smush_data['sizes'] ) : 0;
1565
  }
1566
  }
1567
  }
1568
+ }# End of Foreach Loop
1569
 
1570
  //Check for Upfront images that needs to be smushed
1571
  if ( $upfront_active && 'nextgen' != $type ) {
1572
+ $resmush_list = $this->get_upfront_resmush_list( $resmush_list );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1573
  }//End Of Upfront loop
1574
 
1575
  //Store the resmush list in Options table
1576
  update_option( $key, $resmush_list, false );
1577
  }
1578
+ //Get updated stats for Nextgen
1579
+ if ( 'nextgen' == $type ) {
1580
+ #Reinitialize Nextgen stats
1581
+ $wpsmushnextgenadmin->setup_image_counts();
1582
+ //Image count, Smushed Count, Supersmushed Count, Savings
1583
+ $stats = $wpsmushnextgenstats->get_smush_stats();
1584
+ $image_count = $wpsmushnextgenadmin->image_count;
1585
+ $smushed_count = $wpsmushnextgenadmin->smushed_count;
1586
+ $super_smushed_count = $wpsmushnextgenadmin->super_smushed;
1587
+ }
1588
 
1589
  //Delete resmush list if empty
1590
  if ( empty( $resmush_list ) ) {
1622
  </div>';
1623
  }
1624
 
1625
+ ##Directory Smush Stats
1626
+ //Include directory smush stats if not requested for nextgen
1627
+ if ( 'nextgen' != $type ) {
1628
+ //Append the directory smush stats
1629
+ $dir_smush_stats = get_option( 'dir_smush_stats' );
1630
+ if ( ! empty( $dir_smush_stats ) && is_array( $dir_smush_stats ) ) {
1631
 
1632
+ if ( ! empty( $dir_smush_stats['dir_smush'] ) && ! empty( $dir_smush_stats['optimised'] ) ) {
1633
+ $dir_smush_stats = $dir_smush_stats['dir_smush'];
1634
+ $image_count += $dir_smush_stats['optimised'];
1635
+ }
1636
 
1637
+ //Add directory smush stats if not empty
1638
+ if ( ! empty( $dir_smush_stats['image_size'] ) && ! empty( $dir_smush_stats['orig_size'] ) ) {
1639
+ $stats['size_before'] += $dir_smush_stats['orig_size'];
1640
+ $stats['size_after'] += $dir_smush_stats['image_size'];
1641
+ }
1642
  }
1643
  }
1644
 
1649
  'count_image' => $image_count,
1650
  'count_supersmushed' => $super_smushed_count,
1651
  'count_smushed' => $smushed_count,
1652
+ 'count_resize' => $resized_count,
1653
  'size_before' => $stats['size_before'],
1654
  'size_after' => $stats['size_after'],
1655
+ 'savings_resize' => ! empty( $stats['savings_resize'] ) ? $stats['savings_resize'] : 0,
1656
+ 'savings_conversion' => ! empty( $stats['savings_conversion'] ) ? $stats['savings_conversion'] : 0
1657
  ) : array();
1658
 
1659
  //Include the count
1824
  if ( 'nextgen' != $_POST['type'] ) {
1825
  $resmush_list = get_option( $key );
1826
  if ( ! empty( $resmush_list ) && is_array( $resmush_list ) ) {
1827
+ $stats = $wpsmush_db->get_stats_for_attachments( $resmush_list );
1828
  }
1829
  } else {
1830
+ //For Nextgen. Get the stats( Get the resmush ids )
1831
+ $resmush_ids = get_option( "wp-smush-nextgen-resmush-list", array() );
1832
+ $stats = $wpsmushnextgenstats->get_stats_for_ids( $resmush_ids );
1833
 
1834
+ $stats['count_images'] = $wpsmushnextgenadmin->get_image_count( $resmush_ids, false );
1835
  }
1836
 
1837
  //Delete the resmush list
1996
 
1997
  //Do not display the notice on Bulk Smush Screen
1998
  global $current_screen;
1999
+ if ( ! empty( $current_screen->base ) && ( 'toplevel_page_smush' == $current_screen->base || 'toplevel_page_smush-network' == $current_screen->base || 'gallery_page_wp-smush-nextgen-bulk' == $current_screen->base || 'toplevel_page_smush-network' == $current_screen->base ) ) {
2000
  return true;
2001
  }
2002
 
2008
  ),
2009
  $this->upgrade_url
2010
  );
2011
+ $settings_link = is_multisite() && is_network_admin() ? network_admin_url( 'admin.php?page=smush' ) : menu_page_url( 'smush', false );
2012
 
2013
  $settings_link = '<a href="' . $settings_link . '" title="' . esc_html__( "Review your setting now.", "wp-smushit" ) . '">';
2014
+ $upgrade_link = '<a href="' . esc_url( $upgrade_url ) . '" title="' . esc_html__( "Smush Pro", "wp-smushit" ) . '">';
2015
+ $message_s = sprintf( esc_html__( "Welcome to the newest version of Smush! In this update we've added the ability to bulk smush images in directories outside your uploads folder.", 'wp-smushit' ), WP_SMUSH_VERSION, '<strong>', '</strong>' );
2016
 
2017
  //Message for network admin
2018
  $message_s .= is_multisite() ? sprintf( esc_html__( " And as a multisite user, you can manage %sSmush settings%s globally across all sites!", 'wp-smushit' ), $settings_link, '</a>' ) : '';
2176
 
2177
  //Check the last settings stored in db
2178
  $settings = $wpsmush_settings->get_setting( WP_SMUSH_PREFIX . 'last_settings', array() );
2179
+ $settings = maybe_unserialize( $settings );
2180
 
2181
  //Available settings for free/pro version
2182
  $exclude = array(
2253
  * Load media assets.
2254
  */
2255
  public function extend_media_modal() {
2256
+ if ( ! wp_script_is( 'smush-backbone-extension', 'enqueued' ) ) {
2257
+ wp_enqueue_script( 'smush-backbone-extension', WP_SMUSH_URL . 'assets/js/media.js', array(
2258
  'jquery',
2259
  'media-views',
2260
  'media-grid',
2261
  'wp-util',
2262
  ), $this->version, true );
2263
 
2264
+ wp_localize_script( 'smush-backbone-extension', 'smush_vars', array(
2265
  'strings' => array(
2266
+ 'stats_label' => esc_html__( "Smush", "wp-smushit" )
2267
  ),
2268
  'nonce' => array(
2269
  'get_smush_status' => wp_create_nonce( 'get-smush-status' ),
2273
  }
2274
 
2275
  /**
2276
+ * Send smush status for attachment
2277
+ *
2278
+ * @param $response
2279
+ * @param $attachment
2280
  *
2281
+ * @return mixed
2282
  */
2283
+ function smush_send_status( $response, $attachment ) {
2284
+ if ( ! isset( $attachment->ID ) ) {
2285
+ return $response;
2286
  }
2287
 
 
 
 
 
2288
  //Validate nonce
2289
+ $status = $this->smush_status( $attachment->ID );
2290
+ $response['smush'] = $status;
2291
+
2292
+ return $response;
2293
  }
2294
 
2295
  /**
2314
  );
2315
  wp_send_json_success( $stats );
2316
  }
2317
+
2318
+ /**
2319
+ * Smush icon svg image
2320
+ * @return string
2321
+ *
2322
+ */
2323
+ private function get_menu_icon() {
2324
+ ob_start();
2325
+ ?>
2326
+ <svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2327
+ <!-- Generator: Sketch 49.1 (51147) - http://www.bohemiancoding.com/sketch -->
2328
+ <title>icon-smush</title>
2329
+ <desc>Created with Sketch.</desc>
2330
+ <defs></defs>
2331
+ <g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
2332
+ <g id="WP-/-Menu---Free" transform="translate(-12.000000, -428.000000)" fill="#FFFFFF;">
2333
+ <path d="M26.9310561,432.026782 C27.2629305,432.598346 27.5228884,433.217017 27.7109375,433.882812 C27.9036468,434.565108 28,435.27083 28,436 C28,437.104172 27.7916687,438.14062 27.375,439.109375 C26.9479145,440.07813 26.3750036,440.924476 25.65625,441.648438 C24.9374964,442.372399 24.0937548,442.942706 23.125,443.359375 C22.1562452,443.78646 21.1197972,444 20.015625,444 L26.9310562,432.026782 L26.9310561,432.026782 Z M26.9310561,432.026782 C26.9228316,432.012617 26.9145629,431.998482 26.90625,431.984375 L26.9375,432.015625 L26.9310562,432.026782 L26.9310561,432.026782 Z M16.625,433.171875 L23.375,433.171875 L20,439.03125 L16.625,433.171875 Z M14.046875,430.671875 L14.046875,430.65625 C14.4114602,430.249998 14.8177061,429.88021 15.265625,429.546875 C15.7031272,429.223957 16.1744766,428.945314 16.6796875,428.710938 C17.1848984,428.476561 17.7187472,428.296876 18.28125,428.171875 C18.8333361,428.046874 19.406247,427.984375 20,427.984375 C20.593753,427.984375 21.1666639,428.046874 21.71875,428.171875 C22.2812528,428.296876 22.8151016,428.476561 23.3203125,428.710938 C23.8255234,428.945314 24.3020811,429.223957 24.75,429.546875 C25.1875022,429.88021 25.5937481,430.255206 25.96875,430.671875 L14.046875,430.671875 Z M13.0625,432.03125 L19.984375,444 C18.8802028,444 17.8437548,443.78646 16.875,443.359375 C15.9062452,442.942706 15.0625036,442.372399 14.34375,441.648438 C13.6249964,440.924476 13.0572937,440.07813 12.640625,439.109375 C12.2239563,438.14062 12.015625,437.104172 12.015625,436 C12.015625,435.27083 12.1067699,434.567712 12.2890625,433.890625 C12.4713551,433.213538 12.729165,432.593753 13.0625,432.03125 Z" id="icon-smush"></path>
2334
+ </g>
2335
+ </g>
2336
+ </svg>
2337
+ <?php
2338
+ $svg = ob_get_clean();
2339
+
2340
+ return 'data:image/svg+xml;base64,' . base64_encode( $svg );
2341
+ }
2342
+
2343
+ /**
2344
+ * Checks if upfront images needs to be resmushed
2345
+ *
2346
+ * @param $resmush_list
2347
+ *
2348
+ * @return array Returns the list of image ids that needs to be re-smushed
2349
+ */
2350
+ function get_upfront_resmush_list( $resmush_list ) {
2351
+ global $wpsmush_db;
2352
+ $upfront_attachments = $wpsmush_db->get_upfront_images( $resmush_list );
2353
+ if ( ! empty( $upfront_attachments ) && is_array( $upfront_attachments ) ) {
2354
+ foreach ( $upfront_attachments as $u_attachment_id ) {
2355
+ if ( ! in_array( $u_attachment_id, $resmush_list ) ) {
2356
+ //Check if not smushed
2357
+ $upfront_images = get_post_meta( $u_attachment_id, 'upfront_used_image_sizes', true );
2358
+ if ( ! empty( $upfront_images ) && is_array( $upfront_images ) ) {
2359
+ //Iterate over all the images
2360
+ foreach ( $upfront_images as $image ) {
2361
+ //If any of the element image is not smushed, add the id to resmush list
2362
+ //and skip to next image
2363
+ if ( empty( $image['is_smushed'] ) || 1 != $image['is_smushed'] ) {
2364
+ $resmush_list[] = $u_attachment_id;
2365
+ break;
2366
+ }
2367
+ }
2368
+ }
2369
+ }
2370
+ }
2371
+ }
2372
+
2373
+ return $resmush_list;
2374
+ }
2375
  }
2376
 
2377
  global $wpsmushit_admin;
lib/class-wp-smush-backup.php CHANGED
@@ -163,8 +163,8 @@ if ( ! class_exists( 'WpSmushBackup' ) ) {
163
  //Process Now
164
  $attachment_id = empty( $attachment ) ? absint( (int) $_POST['attachment_id'] ) : $attachment;
165
 
166
- //Set a transient to avoid the smush-restore-smush loop
167
- set_transient( "wp-smush-restore-$attachment_id", true, 60 );
168
 
169
  //Restore Full size -> get other image sizes -> restore other images
170
 
@@ -264,11 +264,14 @@ if ( ! class_exists( 'WpSmushBackup' ) ) {
264
  //Remove Original File
265
  delete_post_meta( $attachment_id, WP_SMUSH_PREFIX . 'original_file' );
266
 
 
 
 
267
  //Get the Button html without wrapper
268
  $button_html = $WpSmush->set_status( $attachment_id, false, false, false );
269
 
270
  //Remove the transient
271
- delete_transient( "wp-smush-restore-$attachment_id" );
272
 
273
  if ( $resp ) {
274
  wp_send_json_success( array( 'button' => $button_html ) );
@@ -277,8 +280,9 @@ if ( ! class_exists( 'WpSmushBackup' ) ) {
277
  }
278
  }
279
  //Remove the transient
280
- delete_transient( "wp-smush-restore-$attachment_id" );
281
- if ( $resp ) {
 
282
  wp_send_json_error( array( 'message' => '<div class="wp-smush-error">' . __( "Unable to restore image", "wp-smushit" ) . '</div>' ) );
283
  }
284
 
163
  //Process Now
164
  $attachment_id = empty( $attachment ) ? absint( (int) $_POST['attachment_id'] ) : $attachment;
165
 
166
+ //Set a Option to avoid the smush-restore-smush loop
167
+ update_option( "wp-smush-restore-$attachment_id", true );
168
 
169
  //Restore Full size -> get other image sizes -> restore other images
170
 
264
  //Remove Original File
265
  delete_post_meta( $attachment_id, WP_SMUSH_PREFIX . 'original_file' );
266
 
267
+ //Delete resize savings
268
+ delete_post_meta( $attachment_id, WP_SMUSH_PREFIX . 'resize_savings' );
269
+
270
  //Get the Button html without wrapper
271
  $button_html = $WpSmush->set_status( $attachment_id, false, false, false );
272
 
273
  //Remove the transient
274
+ delete_option( "wp-smush-restore-$attachment_id" );
275
 
276
  if ( $resp ) {
277
  wp_send_json_success( array( 'button' => $button_html ) );
280
  }
281
  }
282
  //Remove the transient
283
+ delete_option( "wp-smush-restore-$attachment_id" );
284
+
285
+ if ( !$resp ) {
286
  wp_send_json_error( array( 'message' => '<div class="wp-smush-error">' . __( "Unable to restore image", "wp-smushit" ) . '</div>' ) );
287
  }
288
 
lib/class-wp-smush-bulk.php DELETED
@@ -1,96 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * @package WP SmushIt
5
- * @subpackage Admin
6
- * @version 1.0
7
- *
8
- * @author Saurabh Shukla <saurabh@incsub.com>
9
- * @author Umesh Kumar <umesh@incsub.com>
10
- *
11
- * @copyright (c) 2016, Incsub (http://incsub.com)
12
- */
13
- if ( ! class_exists( 'WpSmushitBulk' ) ) {
14
-
15
- /**
16
- * Methods for bulk processing
17
- */
18
- class WpSmushitBulk {
19
-
20
- /**
21
- * Fetch all the unsmushed attachments
22
- * @return array $attachments
23
- */
24
- function get_attachments() {
25
- global $wpsmushit_admin, $wpsmush_stats;
26
-
27
- if ( ! isset( $_REQUEST['ids'] ) ) {
28
- $limit = $wpsmushit_admin->query_limit();
29
- $limit = ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $limit ? $wpsmushit_admin->total_count : $limit;
30
-
31
- //Do not fetch more than this, any time
32
- //Localizing all rows at once increases the page load and sloes down everything
33
- $r_limit = apply_filters( 'wp_smush_max_rows', 5000 );
34
-
35
- $get_posts = true;
36
- $unsmushed_posts = array();
37
- $args = array(
38
- 'fields' => array( 'ids', 'post_mime_type' ),
39
- 'post_type' => 'attachment',
40
- 'post_status' => 'any',
41
- 'orderby' => 'ID',
42
- 'order' => 'DESC',
43
- 'posts_per_page' => $limit,
44
- 'offset' => 0,
45
- 'meta_query' => array(
46
- array(
47
- 'key' => 'wp-smpro-smush-data',
48
- 'compare' => 'NOT EXISTS'
49
- )
50
- ),
51
- 'update_post_meta_cache' => false,
52
- 'update_post_term_cache' => false,
53
- 'no_found_rows' => true,
54
- );
55
- //Loop Over to get all the attachments
56
- while ( $get_posts ) {
57
-
58
- //Remove the Filters added by WP Media Folder
59
- $wpsmush_stats->remove_filters();
60
-
61
- $query = new WP_Query( $args );
62
-
63
- if ( ! empty( $query->post_count ) && sizeof( $query->posts ) > 0 ) {
64
-
65
- //Get a filtered list of post ids
66
- $posts = $wpsmushit_admin->filter_by_mime( $query->posts );
67
-
68
- //Merge the results
69
- $unsmushed_posts = array_merge( $unsmushed_posts, $posts );
70
-
71
- //Update the offset
72
- $args['offset'] += $limit;
73
- } else {
74
- //If we didn't get any posts from query, set $get_posts to false
75
- $get_posts = false;
76
- }
77
-
78
- //If we already got enough posts
79
- if ( count( $unsmushed_posts ) >= $r_limit ) {
80
- $get_posts = false;
81
- }
82
-
83
- //If total Count is set, and it is alread lesser than offset, don't query
84
- if ( ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $args['offset'] ) {
85
- $get_posts = false;
86
- }
87
- }
88
- } else {
89
- return array_map( 'intval', explode( ',', $_REQUEST['ids'] ) );
90
- }
91
-
92
- return $unsmushed_posts;
93
- }
94
-
95
- }
96
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/class-wp-smush-db.php CHANGED
@@ -835,7 +835,7 @@ if ( ! class_exists( 'WpSmushDB' ) ) {
835
  *
836
  *
837
  */
838
- function get_savings_for_attachments( $attachments = array() ) {
839
  //@todo: Add image_count, lossy count, count_smushed
840
  $stats = array(
841
  'size_before' => 0,
@@ -845,7 +845,8 @@ if ( ! class_exists( 'WpSmushDB' ) ) {
845
  'count_images' => 0,
846
  'count_supersmushed' => 0,
847
  'count_smushed' => 0,
848
- 'count_resize' => 0
 
849
  );
850
 
851
  //If we don't have any attachments, return empty array
835
  *
836
  *
837
  */
838
+ function get_stats_for_attachments( $attachments = array() ) {
839
  //@todo: Add image_count, lossy count, count_smushed
840
  $stats = array(
841
  'size_before' => 0,
845
  'count_images' => 0,
846
  'count_supersmushed' => 0,
847
  'count_smushed' => 0,
848
+ 'count_resize' => 0,
849
+ 'count_remaining' => 0
850
  );
851
 
852
  //If we don't have any attachments, return empty array
lib/class-wp-smush-dir.php CHANGED
@@ -34,7 +34,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
34
  add_action( 'wp_smush_before_advanced_settings', array( $this, 'ui' ) );
35
 
36
  //Hook UI at the end of Settings UI
37
- add_action( 'smush_settings_ui_bottom', array( $this, 'ui' ) );
38
 
39
  //Output Stats after Resize savings
40
  add_action( 'stats_ui_after_resize_savings', array( $this, 'stats_ui' ) );
@@ -58,7 +58,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
58
  add_action( 'wp_ajax_get_dir_smush_stats', array( $this, 'get_dir_smush_stats' ) );
59
 
60
  //Add Directory list overlay at the end of content
61
- add_action('admin_footer', array( $this, 'directory_list_dialog' ) );
62
 
63
  }
64
 
@@ -85,19 +85,21 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
85
  if ( ! empty( $dir_smush_stats ) && ! empty( $dir_smush_stats['dir_smush'] ) ) {
86
  $human = ! empty( $dir_smush_stats['dir_smush']['bytes'] ) && $dir_smush_stats['dir_smush']['bytes'] > 0 ? $dir_smush_stats['dir_smush']['bytes'] : 0;
87
  $percent = ! empty( $dir_smush_stats['dir_smush']['percent'] ) && $dir_smush_stats['dir_smush']['percent'] > 0 ? number_format_i18n( $dir_smush_stats['dir_smush']['percent'], 1, '.', '' ) : 0;
88
- }?>
89
  <!-- Savings from Directory Smush -->
90
  <div class="row smush-dir-savings">
91
  <span class="float-l wp-smush-stats-label"><strong><?php esc_html_e( "Directory-smush savings", "wp-smushit" ); ?></strong></span>
92
- <span class="wp-smush-stats<?php echo $human > 0 ? ' float-r' : ' float-l'?>">
93
- <span class="spinner" style="visibility: visible" title="<?php esc_html_e( "Updating Stats", "wp-smushit" ); ?>"></span>
 
94
  <?php
95
  if ( $human < 0 ) { ?>
96
- <span class="wp-smush-stats-human"> <?php echo size_format( $human,1 ); ?></span><?php
97
  //Output percentage only if > 1
98
  if ( $percent > 1 ) { ?>
99
  <span class="wp-smush-stats-sep">/</span>
100
- <span class="wp-smush-stats-percent"><?php echo ! empty( $percent ) ? $percent : ''; ?>%</span><?php
 
101
  }
102
  } else { ?>
103
  <span class="wp-smush-stats-human settings-desc"><?php esc_html_e( "Smush images that aren't located in your uploads folder.", "wp-smushit" ); ?>
@@ -117,10 +119,12 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
117
  function create_table() {
118
  global $wpdb;
119
 
120
- $charset_collate = $wpdb->get_charset_collate();
 
 
 
121
 
122
- //Use a lower index size
123
- $path_index_size = 191;
124
 
125
  /**
126
  * Table: wp_smush_dir_images
@@ -141,6 +145,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
141
  $sql = "CREATE TABLE {$wpdb->prefix}smush_dir_images (
142
  id mediumint(9) NOT NULL AUTO_INCREMENT,
143
  path text NOT NULL,
 
144
  resize varchar(55),
145
  lossy varchar(55),
146
  error varchar(55) DEFAULT NULL,
@@ -150,7 +155,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
150
  last_scan timestamp DEFAULT '0000-00-00 00:00:00',
151
  meta text,
152
  UNIQUE KEY id (id),
153
- UNIQUE KEY path (path($path_index_size)),
154
  KEY image_size (image_size)
155
  ) $charset_collate;";
156
 
@@ -234,7 +239,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
234
  if ( $WpSmush->validate_install() ) {
235
  remove_action( 'wp_smush_before_advanced_settings', array( $this, 'ui' ) );
236
  } else {
237
- remove_action( 'smush_settings_ui_bottom', array( $this, 'ui' ) );
238
  }
239
 
240
  //Reset the bulk limit
@@ -246,6 +251,14 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
246
  wp_nonce_field( 'smush_get_dir_list', 'list_nonce' );
247
  wp_nonce_field( 'smush_get_image_list', 'image_list_nonce' );
248
 
 
 
 
 
 
 
 
 
249
  /** Directory Browser and Image List **/
250
  $wpsmush_bulkui->container_header( 'wp-smush-dir-browser', 'wp-smush-dir-browser', esc_html__( "DIRECTORY SMUSH", "wp-smushit" ) ); ?>
251
  <div class="box-content">
@@ -271,7 +284,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
271
  <i class="icon-fi-warning-alert"></i><?php printf( esc_html__( "%s/%s image(s) were successfully smushed, however %s image(s) could not be smushed due to an error.", "wp-smushit" ), '<span class="wp-smush-dir-smushed"></span>', '<span class="wp-smush-dir-total"></span>', '<span class="wp-smush-dir-remaining"></span>' ); ?>
272
  </div>
273
  <div class="wp-smush-notice wp-smush-dir-limit hidden">
274
- <i class="icon-fi-info"></i><?php printf( esc_html__( " %sUpgrade to pro%s to bulk smush all your directory images with one click. Free users can smush 50 images with each click.", "wp-smushit" ), '<a href="' . esc_url( $wpsmushit_admin->upgrade_url ) . '" target="_blank" title="' . esc_html__( "WP Smush Pro", "wp-smushit" ) . '">', '</a>' ); ?>
275
  </div>
276
  <div class="wp-smush-all-button-wrap bottom">
277
  <!-- @todo: Check status of the images in last scan and do not show smush now button, if already finished -->
@@ -321,6 +334,8 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
321
 
322
  /**
323
  * Return a directory/File list
 
 
324
  */
325
  function directory_list() {
326
  //Check For Permission
@@ -338,7 +353,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
338
  $postDir = realpath( rawurldecode( $postDir ) );
339
 
340
  //If the final path doesn't contains the root path, bail out.
341
- if ( !$root || $postDir === false || strpos( $postDir, $root ) !== 0 ) {
342
  wp_send_json_error( "Unauthorized" );
343
  }
344
 
@@ -353,7 +368,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
353
 
354
  if ( file_exists( $postDir ) ) {
355
 
356
- $files = scandir( $postDir );
357
  //Exclude hidden files
358
  if ( ! empty( $files ) ) {
359
  $files = preg_grep( '/^([^.])/', $files );
@@ -366,7 +381,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
366
  $list = "<ul class='jqueryFileTree' tabindex='0'>";
367
  foreach ( $files as $file ) {
368
 
369
- $htmlRel = htmlentities( ltrim( path_join( $returnDir , $file ), '/' ) );
370
  $htmlName = htmlentities( $file );
371
  $ext = preg_replace( '/^.*\./', '', $file );
372
 
@@ -469,13 +484,18 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
469
  * @return string
470
  */
471
  function get_image_list( $path = '' ) {
472
- global $wpdb;
 
 
 
 
 
473
 
474
  $base_dir = empty( $path ) ? ltrim( $_GET['path'], '/' ) : $path;
475
  $base_dir = realpath( rawurldecode( $base_dir ) );
476
 
477
- if ( !$base_dir ) {
478
- wp_send_json_error( "Unauthorized" );
479
  }
480
 
481
  //Store the path in option
@@ -500,9 +520,9 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
500
  $images = array();
501
  $count = 0;
502
  $timestamp = gmdate( 'Y-m-d H:i:s' );
503
- $values = array();
504
  //Temporary Increase the limit
505
- @ini_set('memory_limit','256M');
506
  foreach ( $iterator as $path ) {
507
 
508
  //Used in place of Skip Dots, For php 5.2 compatability
@@ -531,10 +551,11 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
531
  /** To be stored in DB, Part of code inspired from Ewwww Optimiser */
532
  $image_size = $path->getSize();
533
  $images [] = $file_path;
 
534
  $images [] = $image_size;
535
  $images [] = $file_time;
536
  $images [] = $timestamp;
537
- $values[] = '(%s, %d, %d, %s)';
538
  $count ++;
539
  }
540
  }
@@ -584,7 +605,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
584
  $values = implode( ',', $values );
585
 
586
  //Replace with image path and respective parameters
587
- $query = "INSERT INTO {$wpdb->prefix}smush_dir_images (path,orig_size,file_time,last_scan) VALUES $values ON DUPLICATE KEY UPDATE image_size = IF( file_time < VALUES(file_time), NULL, image_size ), file_time = IF( file_time < VALUES(file_time), VALUES(file_time), file_time ), last_scan = VALUES( last_scan )";
588
  $query = $wpdb->prepare( $query, $images );
589
 
590
  return $query;
@@ -930,21 +951,23 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
930
  }
931
 
932
  $image_id = $this->get_image_id( $item, $images['image_items'] );
933
- $div .= "<li class='wp-smush-image-ele{$class}' id='{$image_id}'><span class='wp-smush-image-ele-status'></span><span class='wp-smush-image-path'>{$item}</span>";
934
- //Close LI
935
- $div .= "</li>";
 
 
936
  }
937
  $div .= "</ul>
938
  <hr />
939
  </li>";
940
- $hr = false;
941
  } else {
942
  $hr = true;
943
  $image_p = array_pop( $image );
944
  //Check if the image is already in optimised list
945
  $class = is_array( $this->optimised_images ) && array_key_exists( $image_p, $this->optimised_images ) ? ' optimised' : '';
946
  $image_id = $this->get_image_id( $image_p, $images['image_items'] );
947
- $div .= "<li class='wp-smush-image-ele{$class}' id='{$image_id}'><span class='wp-smush-image-ele-status'></span><span class='wp-smush-image-path'>{$image_p}</span>";
948
  //Close LI
949
  $div .= "</li>";
950
  }
@@ -985,7 +1008,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
985
  }
986
  $offset += $limit;
987
  //If offset is above total number, do not query
988
- if( $offset > $total ) {
989
  $continue = false;
990
  }
991
  }
@@ -1079,7 +1102,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
1079
 
1080
  // Get the last scan stats.
1081
  $last_scan = $this->last_scan_stats();
1082
- $stats = array();
1083
 
1084
  //Check smush limit for free users
1085
  if ( ! $WpSmush->validate_install() ) {
@@ -1155,9 +1178,9 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
1155
  if ( isset( $_GET['get_stats'] ) && 1 == $_GET['get_stats'] ) {
1156
  // This will setup directory smush stats too.
1157
  $wpsmushit_admin->setup_global_stats();
1158
- $stats = $wpsmushit_admin->stats;
1159
- $stats['total'] = $wpsmushit_admin->total_count;
1160
- $resmush_count = empty( $wpsmushit_admin->resmush_ids ) ? count( $wpsmushit_admin->resmush_ids = get_option( "wp-smush-resmush-list" ) ) : count( $wpsmushit_admin->resmush_ids );
1161
  // $stats['smushed'] = ! empty( $wpsmushit_admin->resmush_ids ) ? $wpsmushit_admin->smushed_count - $resmush_count : $wpsmushit_admin->smushed_count;
1162
  $stats['smushed'] = $wpsmushit_admin->smushed_count;
1163
  if ( $lossy == 1 ) {
@@ -1173,7 +1196,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
1173
 
1174
  //Show the image wise stats
1175
  $image = array(
1176
- 'id' => $id,
1177
  'size_before' => $image['orig_size'],
1178
  'size_after' => $smush_results['data']->after_size
1179
  );
@@ -1328,36 +1351,62 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
1328
 
1329
  /**
1330
  * Output the content for Directory smush list dialog content
1331
- *
1332
  */
1333
  function directory_list_dialog() {
1334
  $current_screen = get_current_screen();
1335
- if ( empty( $current_screen ) || empty( $current_screen->base ) || 'media_page_wp-smush-bulk' != $current_screen->base ) {
1336
  return;
1337
  } ?>
1338
  <div class="dev-overlay small wp-smush-list-dialog roboto-regular">
1339
- <div class="back"></div>
1340
- <div class="box-scroll">
1341
- <div class="box">
1342
- <div class="title"><h3><?php esc_html_e( "Directory list", "wp-smushit" ); ?></h3>
1343
- <div aria-hidden="true" class="close">&times;</div>
1344
- <button class="wpdui-sr-only"><span class="wpdui-sr-only">Close</span></button>
1345
- </div>
1346
- <div class="wp-smush-instruct"><?php esc_html_e( "Choose the folder you wish to smush.", "wp-smushit" ); ?></div>
1347
- <div class="content">
1348
- </div>
1349
- <div class="wp-smush-select-button-wrap">
1350
- <div class="wp-smush-section-desc"><?php esc_html_e( "Smush will also include any images in sub folders of your selected folder.", "wp-smushit" ); ?></div>
1351
- <div class="wp-smush-select-button-wrap-child">
1352
- <span class="spinner"></span>
1353
- <button class="wp-smush-select-dir"><?php esc_html_e( "ADD DIRECTORY", "wp-smushit" ); ?></button>
1354
- </div>
1355
  </div>
1356
  </div>
1357
  </div>
 
1358
  </div><?php
1359
  }
1360
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1361
  }
1362
 
1363
  //Class Object
34
  add_action( 'wp_smush_before_advanced_settings', array( $this, 'ui' ) );
35
 
36
  //Hook UI at the end of Settings UI
37
+ add_action( 'smush_settings_ui_bottom', array( $this, 'ui' ), 11 );
38
 
39
  //Output Stats after Resize savings
40
  add_action( 'stats_ui_after_resize_savings', array( $this, 'stats_ui' ) );
58
  add_action( 'wp_ajax_get_dir_smush_stats', array( $this, 'get_dir_smush_stats' ) );
59
 
60
  //Add Directory list overlay at the end of content
61
+ add_action( 'admin_footer', array( $this, 'directory_list_dialog' ) );
62
 
63
  }
64
 
85
  if ( ! empty( $dir_smush_stats ) && ! empty( $dir_smush_stats['dir_smush'] ) ) {
86
  $human = ! empty( $dir_smush_stats['dir_smush']['bytes'] ) && $dir_smush_stats['dir_smush']['bytes'] > 0 ? $dir_smush_stats['dir_smush']['bytes'] : 0;
87
  $percent = ! empty( $dir_smush_stats['dir_smush']['percent'] ) && $dir_smush_stats['dir_smush']['percent'] > 0 ? number_format_i18n( $dir_smush_stats['dir_smush']['percent'], 1, '.', '' ) : 0;
88
+ } ?>
89
  <!-- Savings from Directory Smush -->
90
  <div class="row smush-dir-savings">
91
  <span class="float-l wp-smush-stats-label"><strong><?php esc_html_e( "Directory-smush savings", "wp-smushit" ); ?></strong></span>
92
+ <span class="wp-smush-stats<?php echo $human > 0 ? ' float-r' : ' float-l' ?>">
93
+ <span class="spinner" style="visibility: visible"
94
+ title="<?php esc_html_e( "Updating Stats", "wp-smushit" ); ?>"></span>
95
  <?php
96
  if ( $human < 0 ) { ?>
97
+ <span class="wp-smush-stats-human"> <?php echo size_format( $human, 1 ); ?></span><?php
98
  //Output percentage only if > 1
99
  if ( $percent > 1 ) { ?>
100
  <span class="wp-smush-stats-sep">/</span>
101
+ <span class="wp-smush-stats-percent"><?php echo ! empty( $percent ) ? $percent : ''; ?>
102
+ %</span><?php
103
  }
104
  } else { ?>
105
  <span class="wp-smush-stats-human settings-desc"><?php esc_html_e( "Smush images that aren't located in your uploads folder.", "wp-smushit" ); ?>
119
  function create_table() {
120
  global $wpdb;
121
 
122
+ //Run the query only on directory smush page
123
+ if ( ! isset( $_GET['page'] ) || 'smush' != $_GET['page'] ) {
124
+ return null;
125
+ }
126
 
127
+ $charset_collate = $wpdb->get_charset_collate();
 
128
 
129
  /**
130
  * Table: wp_smush_dir_images
145
  $sql = "CREATE TABLE {$wpdb->prefix}smush_dir_images (
146
  id mediumint(9) NOT NULL AUTO_INCREMENT,
147
  path text NOT NULL,
148
+ path_hash CHAR(32),
149
  resize varchar(55),
150
  lossy varchar(55),
151
  error varchar(55) DEFAULT NULL,
155
  last_scan timestamp DEFAULT '0000-00-00 00:00:00',
156
  meta text,
157
  UNIQUE KEY id (id),
158
+ UNIQUE KEY path_hash (path_hash),
159
  KEY image_size (image_size)
160
  ) $charset_collate;";
161
 
239
  if ( $WpSmush->validate_install() ) {
240
  remove_action( 'wp_smush_before_advanced_settings', array( $this, 'ui' ) );
241
  } else {
242
+ remove_action( 'smush_settings_ui_bottom', array( $this, 'ui' ), 11 );
243
  }
244
 
245
  //Reset the bulk limit
251
  wp_nonce_field( 'smush_get_dir_list', 'list_nonce' );
252
  wp_nonce_field( 'smush_get_image_list', 'image_list_nonce' );
253
 
254
+ $upgrade_url = add_query_arg(
255
+ array(
256
+ 'utm_source' => 'smush',
257
+ 'utm_medium' => 'plugin',
258
+ 'utm_campaign' => 'smush_directorysmush_limit_notice'
259
+ ),
260
+ $wpsmushit_admin->upgrade_url
261
+ );
262
  /** Directory Browser and Image List **/
263
  $wpsmush_bulkui->container_header( 'wp-smush-dir-browser', 'wp-smush-dir-browser', esc_html__( "DIRECTORY SMUSH", "wp-smushit" ) ); ?>
264
  <div class="box-content">
284
  <i class="icon-fi-warning-alert"></i><?php printf( esc_html__( "%s/%s image(s) were successfully smushed, however %s image(s) could not be smushed due to an error.", "wp-smushit" ), '<span class="wp-smush-dir-smushed"></span>', '<span class="wp-smush-dir-total"></span>', '<span class="wp-smush-dir-remaining"></span>' ); ?>
285
  </div>
286
  <div class="wp-smush-notice wp-smush-dir-limit hidden">
287
+ <i class="icon-fi-info"></i><?php printf( esc_html__( " %sUpgrade to pro%s to bulk smush all your directory images with one click. Free users can smush 50 images with each click.", "wp-smushit" ), '<a href="' . esc_url( $upgrade_url ) . '" target="_blank" title="' . esc_html__( "Smush Pro", "wp-smushit" ) . '">', '</a>' ); ?>
288
  </div>
289
  <div class="wp-smush-all-button-wrap bottom">
290
  <!-- @todo: Check status of the images in last scan and do not show smush now button, if already finished -->
334
 
335
  /**
336
  * Return a directory/File list
337
+ *
338
+ * PHP Connector
339
  */
340
  function directory_list() {
341
  //Check For Permission
353
  $postDir = realpath( rawurldecode( $postDir ) );
354
 
355
  //If the final path doesn't contains the root path, bail out.
356
+ if ( ! $root || $postDir === false || strpos( $postDir, $root ) !== 0 ) {
357
  wp_send_json_error( "Unauthorized" );
358
  }
359
 
368
 
369
  if ( file_exists( $postDir ) ) {
370
 
371
+ $files = scandir( $postDir );
372
  //Exclude hidden files
373
  if ( ! empty( $files ) ) {
374
  $files = preg_grep( '/^([^.])/', $files );
381
  $list = "<ul class='jqueryFileTree' tabindex='0'>";
382
  foreach ( $files as $file ) {
383
 
384
+ $htmlRel = htmlentities( ltrim( path_join( $returnDir, $file ), '/' ) );
385
  $htmlName = htmlentities( $file );
386
  $ext = preg_replace( '/^.*\./', '', $file );
387
 
484
  * @return string
485
  */
486
  function get_image_list( $path = '' ) {
487
+ global $wpdb, $wpsmush_helper;
488
+
489
+ //Return Error if not a valid directory path
490
+ if ( ! is_dir( $path ) ) {
491
+ wp_send_json_error( array( "message" => "Not a valid directory path" ) );
492
+ }
493
 
494
  $base_dir = empty( $path ) ? ltrim( $_GET['path'], '/' ) : $path;
495
  $base_dir = realpath( rawurldecode( $base_dir ) );
496
 
497
+ if ( ! $base_dir ) {
498
+ wp_send_json_error( array( "message" => "Unauthorized" ) );
499
  }
500
 
501
  //Store the path in option
520
  $images = array();
521
  $count = 0;
522
  $timestamp = gmdate( 'Y-m-d H:i:s' );
523
+ $values = array();
524
  //Temporary Increase the limit
525
+ $wpsmush_helper->increase_memory_limit();
526
  foreach ( $iterator as $path ) {
527
 
528
  //Used in place of Skip Dots, For php 5.2 compatability
551
  /** To be stored in DB, Part of code inspired from Ewwww Optimiser */
552
  $image_size = $path->getSize();
553
  $images [] = $file_path;
554
+ $images [] = md5($file_path );
555
  $images [] = $image_size;
556
  $images [] = $file_time;
557
  $images [] = $timestamp;
558
+ $values[] = '(%s, %s, %d, %d, %s)';
559
  $count ++;
560
  }
561
  }
605
  $values = implode( ',', $values );
606
 
607
  //Replace with image path and respective parameters
608
+ $query = "INSERT INTO {$wpdb->prefix}smush_dir_images (path, path_hash, orig_size,file_time,last_scan) VALUES $values ON DUPLICATE KEY UPDATE image_size = IF( file_time < VALUES(file_time), NULL, image_size ), file_time = IF( file_time < VALUES(file_time), VALUES(file_time), file_time ), last_scan = VALUES( last_scan )";
609
  $query = $wpdb->prepare( $query, $images );
610
 
611
  return $query;
951
  }
952
 
953
  $image_id = $this->get_image_id( $item, $images['image_items'] );
954
+ if( !empty( $image_id ) ) {
955
+ $div .= "<li class='wp-smush-image-ele{$class}' id='{$image_id}'><span class='wp-smush-image-ele-status'></span><span class='wp-smush-image-path'>{$item}</span>";
956
+ //Close LI
957
+ $div .= "</li>";
958
+ }
959
  }
960
  $div .= "</ul>
961
  <hr />
962
  </li>";
963
+ $hr = false;
964
  } else {
965
  $hr = true;
966
  $image_p = array_pop( $image );
967
  //Check if the image is already in optimised list
968
  $class = is_array( $this->optimised_images ) && array_key_exists( $image_p, $this->optimised_images ) ? ' optimised' : '';
969
  $image_id = $this->get_image_id( $image_p, $images['image_items'] );
970
+ $div .= "<li class='wp-smush-image-ele{$class}' id='{$image_id}'><span class='wp-smush-image-ele-status'></span><span class='wp-smush-image-path'>{$image_p}</span>";
971
  //Close LI
972
  $div .= "</li>";
973
  }
1008
  }
1009
  $offset += $limit;
1010
  //If offset is above total number, do not query
1011
+ if ( $offset > $total ) {
1012
  $continue = false;
1013
  }
1014
  }
1102
 
1103
  // Get the last scan stats.
1104
  $last_scan = $this->last_scan_stats();
1105
+ $stats = array();
1106
 
1107
  //Check smush limit for free users
1108
  if ( ! $WpSmush->validate_install() ) {
1178
  if ( isset( $_GET['get_stats'] ) && 1 == $_GET['get_stats'] ) {
1179
  // This will setup directory smush stats too.
1180
  $wpsmushit_admin->setup_global_stats();
1181
+ $stats = $wpsmushit_admin->stats;
1182
+ $stats['total'] = $wpsmushit_admin->total_count;
1183
+ $resmush_count = empty( $wpsmushit_admin->resmush_ids ) ? count( $wpsmushit_admin->resmush_ids = get_option( "wp-smush-resmush-list" ) ) : count( $wpsmushit_admin->resmush_ids );
1184
  // $stats['smushed'] = ! empty( $wpsmushit_admin->resmush_ids ) ? $wpsmushit_admin->smushed_count - $resmush_count : $wpsmushit_admin->smushed_count;
1185
  $stats['smushed'] = $wpsmushit_admin->smushed_count;
1186
  if ( $lossy == 1 ) {
1196
 
1197
  //Show the image wise stats
1198
  $image = array(
1199
+ 'id' => $id,
1200
  'size_before' => $image['orig_size'],
1201
  'size_after' => $smush_results['data']->after_size
1202
  );
1351
 
1352
  /**
1353
  * Output the content for Directory smush list dialog content
1354
+ *
1355
  */
1356
  function directory_list_dialog() {
1357
  $current_screen = get_current_screen();
1358
+ if ( empty( $current_screen ) || empty( $current_screen->base ) || ( 'toplevel_page_smush' != $current_screen->base && 'toplevel_page_smush-network' != $current_screen->base ) ) {
1359
  return;
1360
  } ?>
1361
  <div class="dev-overlay small wp-smush-list-dialog roboto-regular">
1362
+ <div class="back"></div>
1363
+ <div class="box-scroll">
1364
+ <div class="box">
1365
+ <div class="title"><h3><?php esc_html_e( "Directory list", "wp-smushit" ); ?></h3>
1366
+ <div aria-hidden="true" class="close">&times;</div>
1367
+ <button class="wpdui-sr-only"><span class="wpdui-sr-only">Close</span></button>
1368
+ </div>
1369
+ <div class="wp-smush-instruct"><?php esc_html_e( "Choose the folder you wish to smush.", "wp-smushit" ); ?></div>
1370
+ <div class="content">
1371
+ </div>
1372
+ <div class="wp-smush-select-button-wrap">
1373
+ <div class="wp-smush-section-desc"><?php esc_html_e( "Smush will also include any images in sub folders of your selected folder.", "wp-smushit" ); ?></div>
1374
+ <div class="wp-smush-select-button-wrap-child">
1375
+ <span class="spinner"></span>
1376
+ <button class="wp-smush-select-dir"><?php esc_html_e( "ADD DIRECTORY", "wp-smushit" ); ?></button>
 
1377
  </div>
1378
  </div>
1379
  </div>
1380
+ </div>
1381
  </div><?php
1382
  }
1383
 
1384
+ /**
1385
+ * Display a admin notice on smush screen if the custom table wasn't created
1386
+ *
1387
+ * @return Notice if table doesn't exists
1388
+ *
1389
+ * @todo: Update text
1390
+ */
1391
+ function check_for_table_error() {
1392
+ global $wpdb;
1393
+ $notice = '';
1394
+ $current_screen = get_current_screen();
1395
+ if ( 'toplevel_page_smush' != $current_screen->id && 'toplevel_page_smush-network' != $current_screen->id ) {
1396
+ return $notice;
1397
+ }
1398
+ $sql = $wpdb->prepare( "SHOW TABLES LIKE %s", $wpdb->esc_like( $wpdb->prefix . 'smush_dir_images' ) );
1399
+ $smush_table = ( $wpdb->get_var( $sql ) != null );
1400
+ if ( ! $smush_table ) {
1401
+ //Display a notice
1402
+ $notice = '<div class="wp-smush-notice missing_table"><p>';
1403
+ $notice .= esc_html__( 'Directory smushing requires custom tables and it seems there was an error creating tables. For help, please contact our team on the support forums', "wp-smushit" );
1404
+ $notice .= '</p></div>';
1405
+ }
1406
+
1407
+ return $notice;
1408
+ }
1409
+
1410
  }
1411
 
1412
  //Class Object
lib/class-wp-smush-helper.php CHANGED
@@ -155,6 +155,57 @@ if ( ! class_exists( 'WpSmushHelper' ) ) {
155
 
156
  return $string;
157
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  }
159
 
160
  global $wpsmush_helper;
155
 
156
  return $string;
157
  }
158
+
159
+ /**
160
+ * Bump up the PHP memory limit temporarily
161
+ */
162
+ function increase_memory_limit() {
163
+ $mlimit = ini_get('memory_limit');
164
+ $trim_limit = rtrim($mlimit,"M");
165
+ if ($trim_limit < '256') {
166
+ @ini_set('memory_limit', '256M');
167
+ }
168
+ }
169
+
170
+ /**
171
+ * Returns true if a database table column exists. Otherwise returns false.
172
+ *
173
+ * @link http://stackoverflow.com/a/5943905/2489248
174
+ * @global wpdb $wpdb
175
+ *
176
+ * @param string $table_name Name of table we will check for column existence.
177
+ * @param string $column_name Name of column we are checking for.
178
+ *
179
+ * @return boolean True if column exists. Else returns false.
180
+ */
181
+ function table_column_exists( $table_name, $column_name ) {
182
+ global $wpdb;
183
+ $column = $wpdb->get_results( $wpdb->prepare(
184
+ "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s AND COLUMN_NAME = %s ",
185
+ DB_NAME, $table_name, $column_name
186
+ ) );
187
+ if ( ! empty( $column ) ) {
188
+ return true;
189
+ }
190
+ return false;
191
+ }
192
+
193
+ /**
194
+ * Drops a specified index from a table.
195
+ *
196
+ * @since 1.0.1
197
+ *
198
+ * @global wpdb $wpdb
199
+ *
200
+ * @param string $table Database table name.
201
+ * @param string $index Index name to drop.
202
+ * @return true True, when finished.
203
+ */
204
+ function drop_index($table, $index) {
205
+ global $wpdb;
206
+ $wpdb->query("ALTER TABLE `$table` DROP INDEX `$index`");
207
+ return true;
208
+ }
209
  }
210
 
211
  global $wpsmush_helper;
lib/class-wp-smush-nextgen.php CHANGED
@@ -39,9 +39,13 @@ if ( ! class_exists( 'WpSmushNextGen' ) ) {
39
  add_filter( 'wp_smush_pro_settings', array( $this, 'add_setting' ), 5 );
40
 
41
  //Check if integration is Enabled or not
42
- //Smush NextGen key
43
- $opt_nextgen = WP_SMUSH_PREFIX . 'nextgen';
44
- $opt_nextgen_val = $wpsmush_settings->get_setting( $opt_nextgen, false );
 
 
 
 
45
 
46
  //return if not a pro user, or nextgen integration is not enabled
47
  if( !$WpSmush->validate_install() || !$opt_nextgen_val ) {
@@ -601,6 +605,9 @@ if ( ! class_exists( 'WpSmushNextGen' ) ) {
601
  //If any of the image is restored, we count it as success
602
  if ( in_array( true, $restored ) ) {
603
 
 
 
 
604
  //Remove the Meta, And send json success
605
  $image->meta_data['wp_smush'] = '';
606
  nggdb::update_image_meta( $image->pid, $image->meta_data );
39
  add_filter( 'wp_smush_pro_settings', array( $this, 'add_setting' ), 5 );
40
 
41
  //Check if integration is Enabled or not
42
+ if ( ! empty( $wpsmush_settings->settings ) ) {
43
+ $opt_nextgen_val = $wpsmush_settings->settings['nextgen'];
44
+ } else {
45
+ //Smush NextGen key
46
+ $opt_nextgen = WP_SMUSH_PREFIX . 'nextgen';
47
+ $opt_nextgen_val = $wpsmush_settings->get_setting( $opt_nextgen, false );
48
+ }
49
 
50
  //return if not a pro user, or nextgen integration is not enabled
51
  if( !$WpSmush->validate_install() || !$opt_nextgen_val ) {
605
  //If any of the image is restored, we count it as success
606
  if ( in_array( true, $restored ) ) {
607
 
608
+ //Update the global Stats
609
+ $wpsmushnextgenadmin->update_nextgen_stats( $image_id );
610
+
611
  //Remove the Meta, And send json success
612
  $image->meta_data['wp_smush'] = '';
613
  nggdb::update_image_meta( $image->pid, $image->meta_data );
lib/class-wp-smush-recommender.php ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Displays the UI for .org plugin recommendations
4
+ *
5
+ * @package WP Smush
6
+ * @subpackage Admin
7
+ * @since 2.7.9
8
+ *
9
+ * @author Umesh Kumar <umesh@incsub.com>
10
+ *
11
+ * @copyright (c) 2018, Incsub (http://incsub.com)
12
+ */
13
+
14
+ if ( ! class_exists( 'WpSmushRecommender' ) ) {
15
+
16
+ class WpSmushRecommender {
17
+
18
+ function __construct() {
19
+ //Hook UI at the end of Settings UI
20
+ add_action( 'smush_settings_ui_bottom', array( $this, 'ui' ), 12 );
21
+
22
+ }
23
+
24
+ /**
25
+ * Do not display Directory smush for Subsites
26
+ *
27
+ * @return bool True/False, whether to display the Directory smush or not
28
+ *
29
+ */
30
+ function should_continue() {
31
+ global $WpSmush;
32
+
33
+ //Do not show directory smush, if not main site in a network
34
+ if ( $WpSmush->validate_install() ) {
35
+ return false;
36
+ }
37
+
38
+ return true;
39
+ }
40
+
41
+ /**
42
+ * Output the required UI for Plugin recommendations
43
+ */
44
+ function ui() {
45
+ global $wpsmushit_admin;
46
+ if ( $this->should_continue() ) { ?>
47
+
48
+ <div class="sui-row" id="sui-cross-sell-footer">
49
+ <div><span class="sui-icon-plugin-2"></span></div>
50
+ <h3><?php esc_html_e( "Check out our other free wordpress.org plugins!", "wp-smushit" ); ?></h3>
51
+ </div>
52
+ <div class="sui-row sui-cross-sell-modules"><?php
53
+ //Hummingbird
54
+ $hb_title = esc_html__( "Hummingbird Page Speed Optimization", "wp-smushit" );
55
+ $hb_content = esc_html__( "Performance Tests, File Optimization & Compression, Page, Browser & Gravatar Caching, GZIP Compression, CloudFlare Integration & more.", "wp-smushit" );
56
+ $hb_class = "hummingbird";
57
+ $hb_url = esc_url( "https://wordpress.org/plugins/hummingbird-performance/" );
58
+ echo $this->recommendation_box( $hb_title, $hb_content, $hb_url, $hb_class, 1 );
59
+ //Defender
60
+ $df_title = esc_html__( "Defender Security, Monitoring, and Hack Protection", "wp-smushit" );
61
+ $df_content = esc_html__( "Security Tweaks & Recommendations, File & Malware Scanning, Login & 404 Lockout Protection, Two-Factor Authentication & more.", "wp-smushit" );
62
+ $df_class = "defender";
63
+ $df_url = esc_url( "https://wordpress.org/plugins/defender-security/" );
64
+ echo $this->recommendation_box( $df_title, $df_content, $df_url, $df_class, 2 );
65
+ //SmartCrawl
66
+ $sc_title = esc_html__( "SmartCrawl Search Engine Optimization", "wp-smushit" );
67
+ $sc_content = esc_html__( "Customize Titles & Meta Data, OpenGraph, Twitter & Pinterest Support, Auto-Keyword Linking, SEO & Readability Analysis, Sitemaps, URL Crawler & more.", "wp-smushit" );
68
+ $sc_class = "smartcrawl";
69
+ $sc_url = esc_url( "https://wordpress.org/plugins/smartcrawl-seo" );
70
+ echo $this->recommendation_box( $sc_title, $sc_content, $sc_url, $sc_class, 3 );
71
+ $site_url = esc_url( "https://premium.wpmudev.org/projects/" );
72
+ $site_url = add_query_arg(
73
+ array(
74
+ 'utm_source' => 'smush',
75
+ 'utm_medium' => 'plugin',
76
+ 'utm_campaign' => 'smush_footer_upsell_notice'
77
+ ),
78
+ $site_url
79
+ );
80
+ $dir = defined('__DIR__') ? __DIR__ : dirname(__FILE__);
81
+ ?>
82
+ </div>
83
+ <div class="sui-cross-sell-bottom">
84
+ <h3>WPMU DEV - Your WordPress Toolkit</h3>
85
+ <p>Pretty much everything you need for developing and managing WordPress based websites, and then
86
+ some.</p>
87
+
88
+ <a class="sui-button sui-button-green" href="<?php echo $site_url; ?>"
89
+ id="dash-uptime-update-membership" target="_blank">
90
+ Learn more
91
+ </a>
92
+
93
+ <img class="sui-image"
94
+ src="<?php echo plugins_url( "assets/images/dev-team.png", $dir ); ?>"
95
+ srcset="<?php echo plugins_url( "assets/images/dev-team@2x.png", $dir ); ?> 2x"
96
+ alt="Try pro features for free!">
97
+ </div><?php
98
+ }
99
+ ?>
100
+ <div class="sui-footer">Made with <i class="sui-icon-heart"></i> by WPMU DEV</div><?php
101
+
102
+ }
103
+
104
+ /**
105
+ * Prints the UI for the given recommended plugin
106
+ *
107
+ * @param $title
108
+ * @param $content
109
+ * @param $link
110
+ * @param $plugin_class
111
+ */
112
+ function recommendation_box( $title, $content, $link, $plugin_class, $seq ) {
113
+ //Put bg to box parent div ?>
114
+ <div class="sui-col-md-4">
115
+ <div class="sui-cross-<?php echo $seq; ?> sui-cross-<?php echo $plugin_class; ?>"><span></span></div>
116
+ <div class="sui-box">
117
+ <div class="sui-box-body">
118
+ <h3><?php echo $title; ?></h3>
119
+ <p><?php echo $content; ?></p>
120
+ <a href="<?php echo esc_url( $link ); ?>" class="sui-button sui-button-ghost"
121
+ target="_blank">
122
+ View features <i class="sui-icon-arrow-right"></i>
123
+ </a>
124
+ </div>
125
+ </div>
126
+ </div><?php
127
+ }
128
+
129
+ }
130
+
131
+ //Class Object
132
+ global $wpsmush_recommender;
133
+ $wpsmush_promo = new WpSmushRecommender();
134
+ }
lib/class-wp-smush-s3.php CHANGED
@@ -155,7 +155,7 @@ if ( ! class_exists( 'WpSmushS3' ) ) {
155
 
156
  // Do not display the notice on Bulk Smush Screen.
157
  global $current_screen;
158
- if ( ! empty( $current_screen->base ) && 'media_page_wp-smush-bulk' != $current_screen->base && 'gallery_page_wp-smush-nextgen-bulk' != $current_screen->base && 'settings_page_wp-smush-network' != $current_screen->base ) {
159
  return true;
160
  }
161
 
@@ -171,7 +171,7 @@ if ( ! class_exists( 'WpSmushS3' ) ) {
171
 
172
  wp_enqueue_script( 'wp-smushit-notice-js' );
173
  // Settings link.
174
- $settings_link = is_multisite() && $wpsmush_settings->settings['networkwide'] ? network_admin_url( 'settings.php?page=wp-smush' ) : admin_url( 'upload.php?page=wp-smush-bulk' );
175
 
176
  if ( $wpsmushit_admin->validate_install() ) {
177
  // If premium user, but S3 support is not enabled.
@@ -217,7 +217,7 @@ if ( ! class_exists( 'WpSmushS3' ) ) {
217
  }
218
 
219
  //If we only have the attachment id
220
- $full_url = $as3cf->is_attachment_served_by_s3( $attachment_id );
221
  //If the filepath contains S3, get the s3 URL for the file
222
  if ( ! empty( $full_url ) ) {
223
  $full_url = $as3cf->get_attachment_url( $attachment_id );
@@ -256,7 +256,7 @@ if ( ! class_exists( 'WpSmushS3' ) ) {
256
 
257
  //If we have plugin method available, us that otherwise check it ourselves
258
  if ( method_exists( $as3cf, 'is_attachment_served_by_s3' ) ) {
259
- $s3_object = $as3cf->is_attachment_served_by_s3( $attachment_id );
260
  $size_prefix = dirname( $s3_object['key'] );
261
  $size_file_prefix = ( '.' === $size_prefix ) ? '' : $size_prefix . '/';
262
  if ( ! empty( $size_details ) && is_array( $size_details ) ) {
@@ -331,7 +331,7 @@ if ( ! class_exists( 'WpSmushS3' ) ) {
331
  return false;
332
  }
333
  //Get s3 object for the file
334
- $s3_object = $as3cf->is_attachment_served_by_s3( $attachment_id );
335
 
336
  $size_prefix = dirname( $s3_object['key'] );
337
  $size_file_prefix = ( '.' === $size_prefix ) ? '' : $size_prefix . '/';
155
 
156
  // Do not display the notice on Bulk Smush Screen.
157
  global $current_screen;
158
+ if ( ! empty( $current_screen->base ) && 'toplevel_page_smush' != $current_screen->base && 'toplevel_page_smush-network' != $current_screen->base && 'gallery_page_wp-smush-nextgen-bulk' != $current_screen->base && 'toplevel_page_smush-network' != $current_screen->base ) {
159
  return true;
160
  }
161
 
171
 
172
  wp_enqueue_script( 'wp-smushit-notice-js' );
173
  // Settings link.
174
+ $settings_link = is_multisite() && is_network_admin() ? network_admin_url( 'admin.php?page=smush' ) : menu_page_url( 'smush', false );
175
 
176
  if ( $wpsmushit_admin->validate_install() ) {
177
  // If premium user, but S3 support is not enabled.
217
  }
218
 
219
  //If we only have the attachment id
220
+ $full_url = $as3cf->is_attachment_served_by_s3( $attachment_id, true );
221
  //If the filepath contains S3, get the s3 URL for the file
222
  if ( ! empty( $full_url ) ) {
223
  $full_url = $as3cf->get_attachment_url( $attachment_id );
256
 
257
  //If we have plugin method available, us that otherwise check it ourselves
258
  if ( method_exists( $as3cf, 'is_attachment_served_by_s3' ) ) {
259
+ $s3_object = $as3cf->is_attachment_served_by_s3( $attachment_id, true );
260
  $size_prefix = dirname( $s3_object['key'] );
261
  $size_file_prefix = ( '.' === $size_prefix ) ? '' : $size_prefix . '/';
262
  if ( ! empty( $size_details ) && is_array( $size_details ) ) {
331
  return false;
332
  }
333
  //Get s3 object for the file
334
+ $s3_object = $as3cf->is_attachment_served_by_s3( $attachment_id, true );
335
 
336
  $size_prefix = dirname( $s3_object['key'] );
337
  $size_file_prefix = ( '.' === $size_prefix ) ? '' : $size_prefix . '/';
lib/class-wp-smush-settings.php CHANGED
@@ -22,6 +22,11 @@ if ( ! class_exists( 'WpSmushSettings' ) ) {
22
  );
23
 
24
  function __construct() {
 
 
 
 
 
25
 
26
  //Save Settings
27
  add_action( 'wp_ajax_save_settings', array( $this, 'save_settings' ) );
@@ -36,13 +41,24 @@ if ( ! class_exists( 'WpSmushSettings' ) ) {
36
  */
37
  function init_settings() {
38
 
 
39
  $last_settings = $this->get_setting( WP_SMUSH_PREFIX . 'last_settings', array() );
40
- if( empty( $last_settings ) ) {
 
41
  $last_settings = $this->get_serialised_settings();
 
 
 
 
42
  }
 
 
43
  $last_settings = maybe_unserialize( $last_settings );
44
- //Merge with the existing settings
45
- $this->settings = array_merge( $this->settings, $last_settings );
 
 
 
46
  return $this->settings;
47
 
48
  }
@@ -69,7 +85,7 @@ if ( ! class_exists( 'WpSmushSettings' ) ) {
69
  function get_serialised_settings() {
70
  $settings = array();
71
  foreach ( $this->settings as $key => $val ) {
72
- $value = $this->get_setting( WP_SMUSH_PREFIX . $key );;
73
  if ( 'auto' == $key && $value === false ) {
74
  $settings[ $key ] = 1;
75
  } else {
@@ -118,6 +134,7 @@ if ( ! class_exists( 'WpSmushSettings' ) ) {
118
 
119
  //Check the last settings stored in db
120
  $settings = $this->get_setting( WP_SMUSH_PREFIX . 'last_settings', array() );
 
121
 
122
  //If not saved earlier, get it from stored options
123
  if ( empty( $settings ) || 0 == sizeof( $settings ) ) {
22
  );
23
 
24
  function __construct() {
25
+ //Do not initialize if not in admin area
26
+ #wp_head runs specifically in the frontend, good check to make sure we're accidentally not loading settings on required pages
27
+ if ( ! is_admin() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) && did_action('wp_head') ) {
28
+ return null;
29
+ }
30
 
31
  //Save Settings
32
  add_action( 'wp_ajax_save_settings', array( $this, 'save_settings' ) );
41
  */
42
  function init_settings() {
43
 
44
+ #See if we've got serialised settings stored already
45
  $last_settings = $this->get_setting( WP_SMUSH_PREFIX . 'last_settings', array() );
46
+ if ( empty( $last_settings ) ) {
47
+ #Nope - No serialised settings, We populate it and store it in db
48
  $last_settings = $this->get_serialised_settings();
49
+ if ( ! empty( $last_settings ) ) {
50
+ //Store Last Settings in db
51
+ $this->update_setting( WP_SMUSH_PREFIX . 'last_settings', $last_settings );
52
+ }
53
  }
54
+
55
+ #Store it in class variable
56
  $last_settings = maybe_unserialize( $last_settings );
57
+ if ( ! empty( $last_settings ) && is_array( $last_settings ) ) {
58
+ //Merge with the existing settings
59
+ $this->settings = array_merge( $this->settings, $last_settings );
60
+ }
61
+
62
  return $this->settings;
63
 
64
  }
85
  function get_serialised_settings() {
86
  $settings = array();
87
  foreach ( $this->settings as $key => $val ) {
88
+ $value = $this->get_setting( WP_SMUSH_PREFIX . $key );
89
  if ( 'auto' == $key && $value === false ) {
90
  $settings[ $key ] = 1;
91
  } else {
134
 
135
  //Check the last settings stored in db
136
  $settings = $this->get_setting( WP_SMUSH_PREFIX . 'last_settings', array() );
137
+ $settings = maybe_unserialize( $settings );
138
 
139
  //If not saved earlier, get it from stored options
140
  if ( empty( $settings ) || 0 == sizeof( $settings ) ) {
lib/class-wp-smush-share.php CHANGED
@@ -23,7 +23,7 @@ if ( ! class_exists( 'WpSmushShare' ) ) {
23
  }
24
 
25
  $message = sprintf( esc_html__( "%s, you've smushed %s%d%s images and saved %s%s%s in total. Help your friends save bandwidth easily, and help me in my quest to Smush the internet!", "wp-smushit" ), $wpsmushit_admin->get_user_name(), '<span class="smush-share-image-count">', $savings['total_images'], '</span>', '<span class="smush-share-savings">', $savings['human'], '</span>' );
26
- $share_msg = sprintf( esc_html__( 'I saved %s%s%s on my site with WP Smush ( %s ) - wanna make your website light and faster?', "wp-smushit" ) , '<span class="smush-share-savings">', $savings['human'], '</span>', urlencode( "https://wordpress.org/plugins/wp-smushit/" ) ); ?>
27
  <section class="dev-box" id="wp-smush-share-widget">
28
  <div class="box-content roboto-medium">
29
  <p class="wp-smush-share-message"><?php echo $message; ?></p>
@@ -33,7 +33,7 @@ if ( ! class_exists( 'WpSmushShare' ) ) {
33
  class="button wp-smush-share-button" id="wp-smush-twitter-share">
34
  <i class="icon-fi-social-twitter"></i><?php esc_html_e( "TWEET", "wp-smushit" ); ?></a>
35
  <!-- Facebook Button -->
36
- <a href="http://www.facebook.com/sharer.php?s=100&p[title]=WP Smush&p[url]=http://wordpress.org/plugins/wp-smushit/"
37
  class="button wp-smush-share-button" id="wp-smush-facebook-share">
38
  <i class="icon-fi-social-facebook"></i><?php esc_html_e( "SHARE", "wp-smushit" ); ?></a>
39
  <a href="whatsapp://send?text='<?php echo esc_attr( $share_msg ); ?>'"
23
  }
24
 
25
  $message = sprintf( esc_html__( "%s, you've smushed %s%d%s images and saved %s%s%s in total. Help your friends save bandwidth easily, and help me in my quest to Smush the internet!", "wp-smushit" ), $wpsmushit_admin->get_user_name(), '<span class="smush-share-image-count">', $savings['total_images'], '</span>', '<span class="smush-share-savings">', $savings['human'], '</span>' );
26
+ $share_msg = sprintf( esc_html__( 'I saved %s%s%s on my site with Smush ( %s ) - wanna make your website light and faster?', "wp-smushit" ) , '<span class="smush-share-savings">', $savings['human'], '</span>', urlencode( "https://wordpress.org/plugins/wp-smushit/" ) ); ?>
27
  <section class="dev-box" id="wp-smush-share-widget">
28
  <div class="box-content roboto-medium">
29
  <p class="wp-smush-share-message"><?php echo $message; ?></p>
33
  class="button wp-smush-share-button" id="wp-smush-twitter-share">
34
  <i class="icon-fi-social-twitter"></i><?php esc_html_e( "TWEET", "wp-smushit" ); ?></a>
35
  <!-- Facebook Button -->
36
+ <a href="http://www.facebook.com/sharer.php?s=100&p[title]=Smush&p[url]=http://wordpress.org/plugins/wp-smushit/"
37
  class="button wp-smush-share-button" id="wp-smush-facebook-share">
38
  <i class="icon-fi-social-facebook"></i><?php esc_html_e( "SHARE", "wp-smushit" ); ?></a>
39
  <a href="whatsapp://send?text='<?php echo esc_attr( $share_msg ); ?>'"
lib/class-wp-smush-stats.php DELETED
@@ -1,592 +0,0 @@
1
- <?php
2
- /**
3
- * @package WP Smush
4
- * @subpackage Admin
5
- * @version 2.3
6
- *
7
- * @author Umesh Kumar <umesh@incsub.com>
8
- *
9
- * @copyright (c) 2016, Incsub (http://incsub.com)
10
- */
11
- if ( ! class_exists( 'WpSmushStats' ) ) {
12
-
13
- /**
14
- * Class WpSmushStats
15
- */
16
- class WpSmushStats {
17
- function __construct() {
18
- //Update resize savings
19
- add_action( 'wp_smush_image_resized', array( $this, 'resize_savings' ) );
20
- //Update Conversion savings
21
- add_action( 'wp_smush_png_jpg_converted', array( $this, 'conversion_savings' ) );
22
- }
23
-
24
- /**
25
- * Total Image count
26
- * @return int
27
- */
28
- function total_count() {
29
- global $wpsmushit_admin;
30
-
31
- //Remove the Filters added by WP Media Folder
32
- $this->remove_filters();
33
-
34
- $count = 0;
35
-
36
- $counts = wp_count_attachments( $wpsmushit_admin->mime_types );
37
- foreach ( $wpsmushit_admin->mime_types as $mime ) {
38
- if ( isset( $counts->$mime ) ) {
39
- $count += $counts->$mime;
40
- }
41
- }
42
-
43
- // send the count
44
- return $count;
45
- }
46
-
47
- /**
48
- * Optimised images count
49
- *
50
- * @param bool $return_ids
51
- *
52
- * @return array|int
53
- */
54
- function smushed_count( $return_ids = false ) {
55
- global $wpsmushit_admin;
56
-
57
- //Don't query again, if the variable is already set
58
- if ( ! $return_ids && ! empty( $wpsmushit_admin->smushed_count ) && $wpsmushit_admin->smushed_count > 0 ) {
59
- return $wpsmushit_admin->smushed_count;
60
- }
61
-
62
- $query = array(
63
- 'fields' => array( 'ids', 'post_mime_type' ) ,
64
- 'post_type' => 'attachment',
65
- 'post_status' => 'inherit',
66
- 'order' => 'ASC',
67
- 'posts_per_page' => - 1,
68
- 'meta_key' => 'wp-smpro-smush-data',
69
- 'no_found_rows' => true
70
- );
71
-
72
- //Remove the Filters added by WP Media Folder
73
- $this->remove_filters();
74
-
75
- $results = new WP_Query( $query );
76
-
77
- if ( ! is_wp_error( $results ) && $results->post_count > 0 ) {
78
-
79
- $posts = $wpsmushit_admin->filter_by_mime( $results->posts );
80
-
81
- if ( ! $return_ids ) {
82
- //return Post Count
83
- return count( $posts );
84
- } else {
85
- //Return post ids
86
- return $posts;
87
- }
88
- } else {
89
- return false;
90
- }
91
- }
92
-
93
- /**
94
- * Returns/Updates the number of images Super Smushed
95
- *
96
- * @param string $type media/nextgen, Type of images to get/set the super smushed count for
97
- *
98
- * @param array $attachments Optional, By default Media attachments will be fetched
99
- *
100
- * @return array|mixed|void
101
- *
102
- */
103
- function super_smushed_count( $type = 'media', $attachments = '' ) {
104
-
105
- if ( 'media' == $type ) {
106
- $count = $this->media_super_smush_count();
107
- } else {
108
- $key = 'wp-smush-super_smushed_nextgen';
109
-
110
- //Flag to check if we need to re-evaluate the count
111
- $revaluate = false;
112
-
113
- $super_smushed = get_option( $key, false );
114
-
115
- //Check if need to revalidate
116
- if ( ! $super_smushed || empty( $super_smushed ) || empty( $super_smushed['ids'] ) ) {
117
-
118
- $super_smushed = array(
119
- 'ids' => array()
120
- );
121
-
122
- $revaluate = true;
123
- } else {
124
- $last_checked = $super_smushed['timestamp'];
125
-
126
- $diff = $last_checked - current_time( 'timestamp' );
127
-
128
- //Difference in hour
129
- $diff_h = $diff / 3600;
130
-
131
- //if last checked was more than 1 hours.
132
- if ( $diff_h > 1 ) {
133
- $revaluate = true;
134
- }
135
- }
136
- //Do not Revaluate stats if nextgen attachments are not provided
137
- if ( 'nextgen' == $type && empty( $attachments ) && $revaluate ) {
138
- $revaluate = false;
139
- }
140
-
141
- //Need to scan all the image
142
- if ( $revaluate ) {
143
- //Get all the Smushed attachments ids
144
- $super_smushed_images = $this->get_lossy_attachments( $attachments, false );
145
-
146
- if ( ! empty( $super_smushed_images ) && is_array( $super_smushed_images ) ) {
147
- //Iterate over all the attachments to check if it's already there in list, else add it
148
- foreach ( $super_smushed_images as $id ) {
149
- if ( ! in_array( $id, $super_smushed['ids'] ) ) {
150
- $super_smushed['ids'][] = $id;
151
- }
152
- }
153
- }
154
-
155
- $super_smushed['timestamp'] = current_time( 'timestamp' );
156
-
157
- update_option( $key, $super_smushed );
158
- }
159
-
160
- $count = ! empty( $super_smushed['ids'] ) ? count( $super_smushed['ids'] ) : 0;
161
- }
162
-
163
- return $count;
164
- }
165
-
166
- /**
167
- * Updates the Meta for existing smushed images and retrieves the count of Super Smushed images
168
- *
169
- * @return int Count of Super Smushed images
170
- *
171
- */
172
- function media_super_smush_count( $return_ids = false ) {
173
-
174
- global $wpsmushit_admin;
175
-
176
- //Check if we have updated the stats for existing images, One time
177
- if ( ! $lossy_updated = get_option( WP_SMUSH_PREFIX . 'lossy-updated' ) ) {
178
-
179
- //Get all the smushed attachments
180
- $attachments = $this->get_lossy_attachments( '', false );
181
- if ( ! empty( $attachments ) ) {
182
- foreach ( $attachments as $attachment ) {
183
- update_post_meta( $attachment, WP_SMUSH_PREFIX . 'lossy', 1 );
184
- }
185
- }
186
- }
187
-
188
- //Get all the attachments with wp-smush-lossy
189
- $limit = $wpsmushit_admin->query_limit();
190
- $get_posts = true;
191
- $super_smushed = array();
192
- $args = array(
193
- 'fields' => array( 'ids', 'post_mime_type' ),
194
- 'post_type' => 'attachment',
195
- 'post_status' => 'any',
196
- 'orderby' => 'ID',
197
- 'order' => 'DESC',
198
- 'posts_per_page' => $limit,
199
- 'offset' => 0,
200
- 'meta_query' => array(
201
- array(
202
- 'key' => 'wp-smush-lossy',
203
- 'value' => 1
204
- )
205
- ),
206
- 'update_post_term_cache' => false,
207
- 'no_found_rows' => true,
208
- );
209
- //Loop Over to get all the attachments
210
- while ( $get_posts ) {
211
-
212
- //Remove the Filters added by WP Media Folder
213
- $this->remove_filters();
214
-
215
- $query = new WP_Query( $args );
216
-
217
- if ( ! empty( $query->post_count ) && sizeof( $query->posts ) > 0 ) {
218
- $posts = $wpsmushit_admin->filter_by_mime( $query->posts );
219
- //Merge the results
220
- $super_smushed = array_merge( $super_smushed, $posts );
221
-
222
- //Update the offset
223
- $args['offset'] += $limit;
224
- } else {
225
- //If we didn't get any posts from query, set $get_posts to false
226
- $get_posts = false;
227
- }
228
-
229
- //If total Count is set, and it is alread lesser than offset, don't query
230
- if ( ! empty( $this->total_count ) && $this->total_count < $args['offset'] ) {
231
- $get_posts = false;
232
- }
233
- }
234
- if ( ! $lossy_updated ) {
235
- update_option( 'wp-smush-lossy-updated', true );
236
- }
237
-
238
- return $return_ids ? $super_smushed : count( $super_smushed );
239
- }
240
-
241
- /**
242
- * Remove any pre_get_posts_filters added by WP Media Folder plugin
243
- */
244
- function remove_filters() {
245
- //remove any filters added b WP media Folder plugin to get the all attachments
246
- if ( class_exists( 'Wp_Media_Folder' ) ) {
247
- global $wp_media_folder;
248
- if ( is_object( $wp_media_folder ) ) {
249
- remove_filter( 'pre_get_posts', array( $wp_media_folder, 'wpmf_pre_get_posts1' ) );
250
- remove_filter( 'pre_get_posts', array( $wp_media_folder, 'wpmf_pre_get_posts' ), 0, 1 );
251
- }
252
- }
253
- global $wpml_query_filter;
254
- //If WPML is not installed, return
255
- if ( ! is_object( $wpml_query_filter ) ) {
256
- return;
257
- }
258
-
259
- //Remove language filter and let all the images be smushed at once
260
- if ( has_filter( 'posts_join', array( $wpml_query_filter, 'posts_join_filter' ) ) ) {
261
- remove_filter( 'posts_join', array( $wpml_query_filter, 'posts_join_filter' ), 10, 2 );
262
- remove_filter( 'posts_where', array( $wpml_query_filter, 'posts_where_filter' ), 10, 2 );
263
- }
264
- }
265
-
266
- /**
267
- * Get the savings from image resizing, And force update if set to true
268
- *
269
- * @param bool $force_update , Whether to Re-Calculate all the stats or not
270
- *
271
- * @param bool $format Format the Bytes in readable format
272
- *
273
- * @return array|bool|mixed|string Array of {
274
- * 'bytes',
275
- * 'before_size',
276
- * 'after_size'
277
- * }
278
- *
279
- */
280
- function resize_savings( $force_update = true, $format = false ) {
281
- $savings = '';
282
-
283
- if ( ! $force_update ) {
284
- $savings = wp_cache_get( WP_SMUSH_PREFIX . 'resize_savings', 'wp-smush' );
285
- }
286
-
287
- global $wpsmushit_admin;
288
-
289
- //If nothing in cache, Calculate it
290
- if ( empty( $savings ) || $force_update ) {
291
- $savings = array(
292
- 'bytes' => 0,
293
- 'size_before' => 0,
294
- 'size_after' => 0,
295
- );
296
-
297
- $limit = $wpsmushit_admin->query_limit();
298
- $offset = 0;
299
- $query_next = true;
300
- global $wpdb;
301
-
302
- while ( $query_next ) {
303
-
304
- $resize_data = $wpdb->get_col( $wpdb->prepare( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key=%s LIMIT $offset, $limit", WP_SMUSH_PREFIX . 'resize_savings' ) );
305
-
306
- if ( ! empty( $resize_data ) ) {
307
- foreach ( $resize_data as $data ) {
308
-
309
- if ( ! empty( $data ) ) {
310
- $meta = maybe_unserialize( $data );
311
- if ( ! empty( $meta ) && ! empty( $meta['bytes'] ) ) {
312
- $savings['bytes'] += $meta['bytes'];
313
- $savings['size_before'] += $meta['size_before'];
314
- $savings['size_after'] += $meta['size_after'];
315
- }
316
- }
317
- }
318
- }
319
- //Update the offset
320
- $offset += $limit;
321
-
322
- //Compare the Offset value to total images
323
- if ( ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $offset ) {
324
- $query_next = false;
325
- } elseif ( ! $resize_data ) {
326
- //If we didn' got any results
327
- $query_next = false;
328
- }
329
- }
330
-
331
- if ( $format ) {
332
- $savings['bytes'] = size_format( $savings['bytes'], 1 );
333
- }
334
-
335
- wp_cache_set( WP_SMUSH_PREFIX . 'resize_savings', $savings, 'wp-smush' );
336
- }
337
-
338
- return $savings;
339
- }
340
-
341
- /**
342
- * Return/Update PNG -> JPG Conversion savings
343
- *
344
- * @param bool $force_update Whether to force update the conversion savings or not
345
- * @param bool $format Optionally return formatted savings
346
- *
347
- * @return array Savings
348
- */
349
- function conversion_savings( $force_update = true, $format = false ) {
350
- $savings = '';
351
-
352
- if ( ! $force_update ) {
353
- $savings = wp_cache_get( WP_SMUSH_PREFIX . 'pngjpg_savings', 'wp-smush' );
354
- }
355
- //If nothing in cache, Calculate it
356
- if ( empty( $savings ) || $force_update ) {
357
- global $wpsmushit_admin;
358
- $savings = array(
359
- 'bytes' => 0,
360
- 'size_before' => 0,
361
- 'size_after' => 0,
362
- );
363
-
364
- $limit = $wpsmushit_admin->query_limit();
365
- $offset = 0;
366
- $query_next = true;
367
- global $wpdb;
368
-
369
- while ( $query_next ) {
370
-
371
- $conversion_savings = $wpdb->get_col( $wpdb->prepare( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key=%s LIMIT $offset, $limit", WP_SMUSH_PREFIX . 'pngjpg_savings' ) );
372
-
373
- if ( ! empty( $conversion_savings ) ) {
374
- foreach ( $conversion_savings as $data ) {
375
-
376
- if ( ! empty( $data ) ) {
377
- $meta = maybe_unserialize( $data );
378
-
379
- if( is_array( $meta ) ) {
380
- foreach ( $meta as $size ) {
381
- if ( ! empty( $size ) && is_array( $size ) ) {
382
- $savings['bytes'] += $size['bytes'];
383
- $savings['size_before'] += $size['size_before'];
384
- $savings['size_after'] += $size['size_after'];
385
- }
386
- }
387
- }
388
- }
389
- }
390
- }
391
- //Update the offset
392
- $offset += $limit;
393
-
394
- //Compare the Offset value to total images
395
- if ( ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $offset ) {
396
- $query_next = false;
397
- } elseif ( ! $conversion_savings ) {
398
- //If we didn' got any results
399
- $query_next = false;
400
- }
401
- }
402
-
403
- if ( $format ) {
404
- $savings['bytes'] = size_format( $savings['bytes'], 1 );
405
- }
406
-
407
- wp_cache_set( WP_SMUSH_PREFIX . 'pngjpg_savings', $savings, 'wp-smush' );
408
- }
409
-
410
- return $savings;
411
- }
412
-
413
- /**
414
- * Get all the resized images
415
- *
416
- * @return array Array of post ids of all the resized images
417
- *
418
- */
419
- function resize_images() {
420
- global $wpsmushit_admin;
421
- $limit = $wpsmushit_admin->query_limit();
422
- $limit = ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $limit ? $wpsmushit_admin->total_count : $limit;
423
- $get_posts = true;
424
- $resized_images = array();
425
- $args = array(
426
- 'fields' => array( 'ids', 'post_mime_type' ),
427
- 'post_type' => 'attachment',
428
- 'post_status' => 'inherit',
429
- 'orderby' => 'ID',
430
- 'order' => 'DESC',
431
- 'posts_per_page' => $limit,
432
- 'offset' => 0,
433
- 'meta_key' => WP_SMUSH_PREFIX . 'resize_savings',
434
- 'update_post_term_cache' => false,
435
- 'no_found_rows' => true,
436
- );
437
- //Loop Over to get all the attachments
438
- while ( $get_posts ) {
439
-
440
- //Remove the Filters added by WP Media Folder
441
- $this->remove_filters();
442
-
443
- $query = new WP_Query( $args );
444
-
445
- if ( ! empty( $query->post_count ) && sizeof( $query->posts ) > 0 ) {
446
-
447
- $posts = $wpsmushit_admin->filter_by_mime( $query->posts );
448
-
449
- //Merge the results
450
- $resized_images = array_merge( $resized_images, $posts );
451
-
452
- //Update the offset
453
- $args['offset'] += $limit;
454
- } else {
455
- //If we didn't get any posts from query, set $get_posts to false
456
- $get_posts = false;
457
- }
458
-
459
- //If total Count is set, and it is alread lesser than offset, don't query
460
- if ( ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $args['offset'] ) {
461
- $get_posts = false;
462
- }
463
- }
464
-
465
- return $resized_images;
466
- }
467
-
468
- /**
469
- * Get all the PNGJPG Converted images
470
- *
471
- * @return array Array of post ids of all the converted images
472
- *
473
- */
474
- function converted_images() {
475
- global $wpsmushit_admin;
476
- $limit = $wpsmushit_admin->query_limit();
477
- $limit = ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $limit ? $wpsmushit_admin->total_count : $limit;
478
- $get_posts = true;
479
- $converted_images = array();
480
- $args = array(
481
- 'fields' => array( 'ids', 'post_mime_type' ),
482
- 'post_type' => 'attachment',
483
- 'post_status' => 'inherit',
484
- 'orderby' => 'ID',
485
- 'order' => 'DESC',
486
- 'posts_per_page' => $limit,
487
- 'offset' => 0,
488
- 'meta_key' => WP_SMUSH_PREFIX . 'pngjpg_savings',
489
- 'update_post_term_cache' => false,
490
- 'no_found_rows' => true,
491
- );
492
- //Loop Over to get all the attachments
493
- while ( $get_posts ) {
494
-
495
- //Remove the Filters added by WP Media Folder
496
- $this->remove_filters();
497
-
498
- $query = new WP_Query( $args );
499
-
500
- if ( ! empty( $query->post_count ) && sizeof( $query->posts ) > 0 ) {
501
-
502
- //Filter Posts by mime types
503
- $posts = $wpsmushit_admin->filter_by_mime( $query->posts );
504
-
505
- //Merge the results
506
- $converted_images = array_merge( $converted_images, $posts );
507
-
508
- //Update the offset
509
- $args['offset'] += $limit;
510
- } else {
511
- //If we didn't get any posts from query, set $get_posts to false
512
- $get_posts = false;
513
- }
514
-
515
- //If total Count is set, and it is alread lesser than offset, don't query
516
- if ( ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $args['offset'] ) {
517
- $get_posts = false;
518
- }
519
- }
520
-
521
- return $converted_images;
522
- }
523
-
524
- /**
525
- * Returns the ids and meta which are losslessly compressed
526
- *
527
- * Called only if the meta key isn't updated for old images, else it is not used
528
- *
529
- * @return array
530
- */
531
- function get_lossy_attachments( $attachments = '', $return_count = true ) {
532
-
533
- $lossy_attachments = array();
534
- $count = 0;
535
-
536
- if ( empty( $attachments ) ) {
537
- //Fetch all the smushed attachment ids
538
- $attachments = $this->smushed_count( true );
539
- }
540
-
541
- //If we dont' have any attachments
542
- if ( empty( $attachments ) || 0 == count( $attachments ) ) {
543
- return 0;
544
- }
545
-
546
- //Check if image is lossless or lossy
547
- foreach ( $attachments as $attachment ) {
548
-
549
- //Check meta for lossy value
550
- $smush_data = ! empty( $attachment->smush_data ) ? maybe_unserialize( $attachment->smush_data ) : '';
551
-
552
- //For Nextgen Gallery images
553
- if ( empty( $smush_data ) && is_array( $attachment ) && ! empty( $attachment['wp_smush'] ) ) {
554
- $smush_data = ! empty( $attachment['wp_smush'] ) ? $attachment['wp_smush'] : '';
555
- }
556
-
557
- //Return if not smushed
558
- if ( empty( $smush_data ) ) {
559
- continue;
560
- }
561
-
562
- //if stats not set or lossy is not set for attachment, return
563
- if ( empty( $smush_data['stats'] ) || ! isset( $smush_data['stats']['lossy'] ) ) {
564
- continue;
565
- }
566
-
567
- //Add to array if lossy is not 1
568
- if ( 1 == $smush_data['stats']['lossy'] ) {
569
- $count ++;
570
- if ( ! empty( $attachment->attachment_id ) ) {
571
- $lossy_attachments[] = $attachment->attachment_id;
572
- } elseif ( is_array( $attachment ) && ! empty( $attachment['pid'] ) ) {
573
- $lossy_attachments[] = $attachment['pid'];
574
- }
575
- }
576
- }
577
- unset( $attachments );
578
-
579
- if ( $return_count ) {
580
- return $count;
581
- }
582
-
583
- return $lossy_attachments;
584
- }
585
- }
586
-
587
- /**
588
- * Initialise class
589
- */
590
- global $wpsmush_stats;
591
- $wpsmush_stats = new WpSmushStats();
592
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/class-wp-smush-ui.php CHANGED
@@ -305,9 +305,9 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
305
  //If we have any savings
306
  $upgrade_url = add_query_arg(
307
  array(
308
- 'utm_source' => 'Smush-Free',
309
- 'utm_medium' => 'Banner',
310
- 'utm_campaign'=> 'pro-only-stats'
311
  ),
312
  $wpsmushit_admin->upgrade_url
313
  );
@@ -357,9 +357,9 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
357
  }
358
  $upgrade_url = add_query_arg(
359
  array(
360
- 'utm_source' => 'Smush-Free',
361
- 'utm_medium' => 'Banner',
362
- 'utm_campaign'=> 'pro-only-advanced-settings'
363
  ),
364
  $wpsmushit_admin->upgrade_url
365
  );
@@ -592,7 +592,7 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
592
 
593
  if( !$is_network ) {
594
  //Show Configure screen for only a new installation and for only network admins
595
- if ( ( 1 != get_site_option( 'skip-smush-setup' ) && 1 != get_site_option( 'wp-smush-hide_smush_welcome' ) && 1 != get_option( 'wp-smush-hide_smush_welcome' ) ) && 1 != get_option( 'hide_smush_features' ) && is_super_admin() ) {
596
  echo '<div class="block float-l">';
597
  $this->quick_setup();
598
  echo '</div>';
@@ -645,71 +645,11 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
645
  $this->settings_ui();
646
  }
647
 
648
- do_action('smush_settings_ui_bottom');
649
-
650
- //Validate Membership
651
- if( !$wpsmushit_admin->validate_install() ) {?>
652
- <div class="wp-smush-pro-for-free wp-smushit-container-left col-half float-l"><?php
653
- $this->wp_smush_promo();?>
654
- </div>
655
- <div class="wp-smushit-container-left col-half float-l"><?php
656
- $this->wp_smush_hummingbird_promo(); ?>
657
- </div><?php
658
- } ?>
659
  </div><?php
660
  $this->smush_page_footer();
661
  }
662
 
663
- /**
664
- * Pro Version
665
- */
666
- function wp_smush_promo() {
667
- global $wpsmushit_admin;
668
- $this->container_header( 'wp-smush-pro-adv', 'wp-smush-pro-promo', "READY TO LEVEL UP YOUR WEB DEVELOPMENT?" );
669
- $upgrade_url = add_query_arg(
670
- array(
671
- 'utm_source' => 'Smush-Free',
672
- 'utm_medium' => 'Banner',
673
- 'utm_campaign' => 'settings-sidebar'
674
- ),
675
- $wpsmushit_admin->upgrade_url
676
- );
677
- ?>
678
- <div class="box-content">
679
- <p class="wp-smush-promo-content wp-smush-promo-content-2 roboto">Create amazing websites, automate your workflow, and run your business like a well-oiled machine.
680
- Get access to the tools that will win you more clients and help you spend less time working.
681
- Start a free WPMU DEV trial today.</p>
682
- <span class="wp-smush-pro-cta tc">
683
- <a href="#smush-pro-features" class="button button-cta button-green get-smush-pro-cta" rel="dialog" target="_blank"><?php esc_html_e("GET STARTED", "wp-smushit"); ?></a>
684
- </span>
685
- </div><?php
686
- echo "</section>";
687
- }
688
-
689
- /**
690
- * HummingBird Promo
691
- */
692
- function wp_smush_hummingbird_promo() {
693
- //Plugin Already Installed
694
- if ( class_exists( 'WP_Hummingbird' ) ) {
695
- return;
696
- }
697
- $this->container_header( 'wp-smush-hb-adv', 'wp-smush-hb-promo', "OH YEAH, SMUSHING ON STEROIDS!" ); ?>
698
- <div class="box-content">
699
- <span class="wp-smush-hummingbird-image tc">
700
- <img src="<?php echo WP_SMUSH_URL . 'assets/images/hummingbird.png'; ?>"
701
- alt="<?php esc_html_e( "BOOST YOUR PERFORMANCE - HUMMINGBIRD", "wp-smushit" ); ?>">
702
- </span>
703
- <p class="wp-smush-promo-content tc roboto">Hummingbird goes beyond Smush compression with
704
- minification, caching, performance monitoring and more - every millisecond counts!</p>
705
- <span class="wp-smush-hb-cta tc roboto-medium">
706
- <a href="<?php echo esc_url( "https://premium.wpmudev.org/project/wp-hummingbird/" ); ?>"
707
- class="button button-cta" target="_blank">TRY HUMMINGBIRD FOR FREE</a>
708
- </span>
709
- </div><?php
710
- echo "</section>";
711
- }
712
-
713
  /**
714
  * Outputs the Content for Bulk Smush Div
715
  */
@@ -777,9 +717,9 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
777
  $class = count( $wpsmushit_admin->resmush_ids ) > 0 ? ' hidden' : '';
778
  $upgrade_url = add_query_arg(
779
  array(
780
- 'utm_source' => 'Smush-Free',
781
- 'utm_medium' => 'Banner',
782
- 'utm_campaign' => 'yellow-bulk-smush-upsell'
783
  ),
784
  $wpsmushit_admin->upgrade_url
785
  );
@@ -789,7 +729,7 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
789
  <span class="wp-smush-notice-text"><?php
790
  printf( _n( "%s, you have %s%s%d%s attachment%s that needs smushing!", "%s, you have %s%s%d%s attachments%s that need smushing!", $wpsmushit_admin->remaining_count, "wp-smushit" ), $wpsmushit_admin->get_user_name(), '<strong>', '<span class="wp-smush-remaining-count">', $wpsmushit_admin->remaining_count, '</span>', '</strong>' );
791
  if( !$WpSmush->validate_install() && $wpsmushit_admin->remaining_count > 50 ) {
792
- printf( esc_html__(" %sUpgrade to Pro%s to bulk smush all your images with one click.", "wp-smushit") , '<a href="' . esc_url( $upgrade_url ). '" target="_blank" title="' . esc_html__("WP Smush Pro", "wp-smushit") . '">', '</a>' );
793
  esc_html_e(" Free users can smush 50 images with each click.", "wp-smushit");
794
  }?>
795
  </span>
@@ -816,7 +756,7 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
816
  // calculate %ages, avoid divide by zero error with no attachments
817
 
818
  if ( $count->total_count > 0 && $count->smushed_count > 0 ) {
819
- $smushed_pc = $count->smushed_count / $count->total_count * 100;
820
  } else {
821
  $smushed_pc = 0;
822
  }
@@ -917,7 +857,7 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
917
  * Prints out the page header for Bulk Smush Page
918
  */
919
  function smush_page_header() {
920
- global $WpSmush, $wpsmushit_admin, $wpsmush_s3;
921
 
922
  //Include Shared UI
923
  require_once WP_SMUSH_DIR . 'assets/shared-ui/plugin-ui.php';
@@ -928,7 +868,7 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
928
  }
929
 
930
  //Page Heading for Free and Pro Version
931
- $page_heading = $WpSmush->validate_install() ? esc_html__( 'WP Smush Pro', 'wp-smushit' ) : esc_html__( 'WP Smush', 'wp-smushit' );
932
 
933
  $auto_smush_message = $WpSmush->is_auto_smush_enabled() ? sprintf( esc_html__( "Automatic smushing is %senabled%s. Newly uploaded images will be automagically compressed.", "wp-smushit" ), '<span class="wp-smush-auto-enabled">', '</span>' ) : sprintf( esc_html__( "Automatic smushing is %sdisabled%s. Newly uploaded images will need to be manually smushed.", "wp-smushit" ), '<span class="wp-smush-auto-disabled">', '</span>' );
934
 
@@ -946,6 +886,7 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
946
  </div>' .
947
  $user_validation .
948
  $recheck_notice .
 
949
  '</section>';
950
 
951
  //Check for any stored API message and show it
@@ -1023,16 +964,16 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
1023
  }
1024
  $upgrade_url = add_query_arg(
1025
  array(
1026
- 'utm_source' => 'Smush-Free',
1027
- 'utm_medium' => 'Banner',
1028
- 'utm_campaign' => 'smush-lady-upgrade'
1029
  ),
1030
  $wpsmushit_admin->upgrade_url
1031
  ); ?>
1032
  <div class="wp-smush-super-smush-promo">
1033
  <div class="wp-smush-super-smush-content-wrapper">
1034
  <div class="wp-smush-super-smush-content"><?php
1035
- printf( esc_html__("Did you know WP Smush Pro delivers up to 2x better compression, allows you to smush your originals and removes any bulk smushing limits? – %sTry it absolutely FREE%s", "wp-smushit"), '<a href="' . esc_url( $upgrade_url ). '" target="_blank" title="' . esc_html__("Try WP Smush Pro for FREE", "wp-smushit") . '">', '</a>' ); ?>
1036
  </div>
1037
  </div>
1038
  </div>
@@ -1049,15 +990,15 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
1049
  }
1050
  $upgrade_url = add_query_arg(
1051
  array(
1052
- 'utm_source' => 'Smush-Free',
1053
- 'utm_medium' => 'Banner',
1054
  'utm_campaign' => 'smush-advanced-settings-upsell'
1055
  ),
1056
  $wpsmushit_admin->upgrade_url
1057
  ); ?>
1058
  <div class="wp-smush-super-smush-promo">
1059
  <div class="wp-smush-super-smush-content"><?php
1060
- printf( esc_html__("Smush Pro gives you all these extra settings and absolutely no limits on smushing your images! Did we mention Smush Pro also gives you up to 2x better compression too? – %sTry it all free with a WPMU DEV membership today!%s", "wp-smushit"), '<a href="' . esc_url( $upgrade_url ). '" target="_blank" title="' . esc_html__("Try WP Smush Pro for FREE", "wp-smushit") . '">', '</a>' ); ?>
1061
  </div>
1062
  </div>
1063
  <?php
@@ -1207,7 +1148,8 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
1207
  <div class="wp-smush-resize-note" id="<?php echo $prefix; ?>wp-smush-resize-note"><?php printf( esc_html__("Currently, your largest image size is set at %s%dpx wide %s %dpx high%s.", "wp-smushit"), '<strong>', $max_sizes['width'], '&times;', $max_sizes['height'], '</strong>' ); ?></div>
1208
  <div class="wp-smush-settings-info wp-smush-size-info wp-smush-update-width hidden" tabindex="0"><?php esc_html_e( "Just to let you know, the width you've entered is less than your largest image and may result in pixelation.", "wp-smushit" ); ?></div>
1209
  <div class="wp-smush-settings-info wp-smush-size-info wp-smush-update-height hidden" tabindex="0"><?php esc_html_e( "Just to let you know, the height you’ve entered is less than your largest image and may result in pixelation.", "wp-smushit" ); ?></div>
1210
- </div><?php
 
1211
  }
1212
 
1213
  /**
@@ -1286,9 +1228,9 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
1286
  //If we have any savings
1287
  $upgrade_url = add_query_arg(
1288
  array(
1289
- 'utm_source' => 'Smush-Free',
1290
- 'utm_medium' => 'Banner',
1291
- 'utm_campaign'=> 'pro-only-stats'
1292
  ),
1293
  $wpsmushit_admin->upgrade_url
1294
  );?>
305
  //If we have any savings
306
  $upgrade_url = add_query_arg(
307
  array(
308
+ 'utm_source' => 'smush',
309
+ 'utm_medium' => 'plugin',
310
+ 'utm_campaign'=> 'smush_stats_prosavings_tag'
311
  ),
312
  $wpsmushit_admin->upgrade_url
313
  );
357
  }
358
  $upgrade_url = add_query_arg(
359
  array(
360
+ 'utm_source' => 'smush',
361
+ 'utm_medium' => 'plugin',
362
+ 'utm_campaign'=> 'smush_advancedsettings_profeature_tag'
363
  ),
364
  $wpsmushit_admin->upgrade_url
365
  );
592
 
593
  if( !$is_network ) {
594
  //Show Configure screen for only a new installation and for only network admins
595
+ if ( ( 1 != get_site_option( 'skip-smush-setup' ) && 1 != get_option( 'wp-smush-hide_smush_welcome' ) ) && 1 != get_option( 'hide_smush_features' ) && is_super_admin() ) {
596
  echo '<div class="block float-l">';
597
  $this->quick_setup();
598
  echo '</div>';
645
  $this->settings_ui();
646
  }
647
 
648
+ do_action('smush_settings_ui_bottom'); ?>
 
 
 
 
 
 
 
 
 
 
649
  </div><?php
650
  $this->smush_page_footer();
651
  }
652
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
653
  /**
654
  * Outputs the Content for Bulk Smush Div
655
  */
717
  $class = count( $wpsmushit_admin->resmush_ids ) > 0 ? ' hidden' : '';
718
  $upgrade_url = add_query_arg(
719
  array(
720
+ 'utm_source' => 'smush',
721
+ 'utm_medium' => 'plugin',
722
+ 'utm_campaign' => 'smush_bulksmush_limit_notice'
723
  ),
724
  $wpsmushit_admin->upgrade_url
725
  );
729
  <span class="wp-smush-notice-text"><?php
730
  printf( _n( "%s, you have %s%s%d%s attachment%s that needs smushing!", "%s, you have %s%s%d%s attachments%s that need smushing!", $wpsmushit_admin->remaining_count, "wp-smushit" ), $wpsmushit_admin->get_user_name(), '<strong>', '<span class="wp-smush-remaining-count">', $wpsmushit_admin->remaining_count, '</span>', '</strong>' );
731
  if( !$WpSmush->validate_install() && $wpsmushit_admin->remaining_count > 50 ) {
732
+ printf( esc_html__(" %sUpgrade to Pro%s to bulk smush all your images with one click.", "wp-smushit") , '<a href="' . esc_url( $upgrade_url ). '" target="_blank" title="' . esc_html__("Smush Pro", "wp-smushit") . '">', '</a>' );
733
  esc_html_e(" Free users can smush 50 images with each click.", "wp-smushit");
734
  }?>
735
  </span>
756
  // calculate %ages, avoid divide by zero error with no attachments
757
 
758
  if ( $count->total_count > 0 && $count->smushed_count > 0 ) {
759
+ $smushed_pc = ( $count->smushed_count / $count->total_count ) * 100;
760
  } else {
761
  $smushed_pc = 0;
762
  }
857
  * Prints out the page header for Bulk Smush Page
858
  */
859
  function smush_page_header() {
860
+ global $WpSmush, $wpsmushit_admin, $wpsmush_s3, $wpsmush_dir;
861
 
862
  //Include Shared UI
863
  require_once WP_SMUSH_DIR . 'assets/shared-ui/plugin-ui.php';
868
  }
869
 
870
  //Page Heading for Free and Pro Version
871
+ $page_heading = esc_html__("DASHBOARD", "wp-smushit");
872
 
873
  $auto_smush_message = $WpSmush->is_auto_smush_enabled() ? sprintf( esc_html__( "Automatic smushing is %senabled%s. Newly uploaded images will be automagically compressed.", "wp-smushit" ), '<span class="wp-smush-auto-enabled">', '</span>' ) : sprintf( esc_html__( "Automatic smushing is %sdisabled%s. Newly uploaded images will need to be manually smushed.", "wp-smushit" ), '<span class="wp-smush-auto-disabled">', '</span>' );
874
 
886
  </div>' .
887
  $user_validation .
888
  $recheck_notice .
889
+ $wpsmush_dir->check_for_table_error();
890
  '</section>';
891
 
892
  //Check for any stored API message and show it
964
  }
965
  $upgrade_url = add_query_arg(
966
  array(
967
+ 'utm_source' => 'smush',
968
+ 'utm_medium' => 'plugin',
969
+ 'utm_campaign' => 'smush_bulksmush_upsell_notice'
970
  ),
971
  $wpsmushit_admin->upgrade_url
972
  ); ?>
973
  <div class="wp-smush-super-smush-promo">
974
  <div class="wp-smush-super-smush-content-wrapper">
975
  <div class="wp-smush-super-smush-content"><?php
976
+ printf( esc_html__("Did you know Smush Pro delivers up to 2x better compression, allows you to smush your originals and removes any bulk smushing limits? – %sTry it absolutely FREE%s", "wp-smushit"), '<a href="' . esc_url( $upgrade_url ). '" target="_blank" title="' . esc_html__("Try Smush Pro for FREE", "wp-smushit") . '">', '</a>' ); ?>
977
  </div>
978
  </div>
979
  </div>
990
  }
991
  $upgrade_url = add_query_arg(
992
  array(
993
+ 'utm_source' => 'smush',
994
+ 'utm_medium' => 'plugin',
995
  'utm_campaign' => 'smush-advanced-settings-upsell'
996
  ),
997
  $wpsmushit_admin->upgrade_url
998
  ); ?>
999
  <div class="wp-smush-super-smush-promo">
1000
  <div class="wp-smush-super-smush-content"><?php
1001
+ printf( esc_html__("Smush Pro gives you all these extra settings and absolutely no limits on smushing your images! Did we mention Smush Pro also gives you up to 2x better compression too? – %sTry it all free with a WPMU DEV membership today!%s", "wp-smushit"), '<a href="' . esc_url( $upgrade_url ). '" target="_blank" title="' . esc_html__("Try Smush Pro for FREE", "wp-smushit") . '">', '</a>' ); ?>
1002
  </div>
1003
  </div>
1004
  <?php
1148
  <div class="wp-smush-resize-note" id="<?php echo $prefix; ?>wp-smush-resize-note"><?php printf( esc_html__("Currently, your largest image size is set at %s%dpx wide %s %dpx high%s.", "wp-smushit"), '<strong>', $max_sizes['width'], '&times;', $max_sizes['height'], '</strong>' ); ?></div>
1149
  <div class="wp-smush-settings-info wp-smush-size-info wp-smush-update-width hidden" tabindex="0"><?php esc_html_e( "Just to let you know, the width you've entered is less than your largest image and may result in pixelation.", "wp-smushit" ); ?></div>
1150
  <div class="wp-smush-settings-info wp-smush-size-info wp-smush-update-height hidden" tabindex="0"><?php esc_html_e( "Just to let you know, the height you’ve entered is less than your largest image and may result in pixelation.", "wp-smushit" ); ?></div>
1151
+ </div>
1152
+ <span class="wp-smush-setting-desc desc-note"><?php esc_html_e("Note: Image resizing happens automatically when you upload attachments. This setting does not apply to images smushed using Directory Smush feature. To support retina devices, we recommend using 2x the dimensions of your image size.", "wp-smushit"); ?></span><?php
1153
  }
1154
 
1155
  /**
1228
  //If we have any savings
1229
  $upgrade_url = add_query_arg(
1230
  array(
1231
+ 'utm_source' => 'smush',
1232
+ 'utm_medium' => 'plugin',
1233
+ 'utm_campaign'=> 'smush_stats_prosavings_tag'
1234
  ),
1235
  $wpsmushit_admin->upgrade_url
1236
  );?>
lib/class-wp-smush.php CHANGED
@@ -86,6 +86,18 @@ if ( ! class_exists( 'WpSmush' ) ) {
86
  */
87
  var $media_type = 'wp';
88
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  /**
90
  * Constructor
91
  */
@@ -121,17 +133,18 @@ if ( ! class_exists( 'WpSmush' ) ) {
121
  //Enqueue Scripts, And Initialize variables
122
  add_action( 'admin_init', array( $this, 'admin_init' ) );
123
 
124
- //Load NextGen Gallery, S3, if hooked too late or early, auto smush doesn't works, also Load after settings have been saved on init action
125
- add_action( 'plugins_loaded', array( $this, 'load_modules' ), 90 );
126
-
127
  //Send Smush Stats for pro members
128
  add_filter( 'wpmudev_api_project_extra_data-912164', array( $this, 'send_smush_stats' ) );
129
 
130
  //Send Smush Stats for pro members
131
  add_action( 'wp_ajax_smush_show_warning', array( $this, 'show_warning_ajax' ) );
132
 
133
- //Instanitate the Async class
134
- add_action( 'plugins_loaded', array( $this, 'wp_smush_async' ) );
 
 
 
 
135
 
136
  //Handle the Async optimisation
137
  add_action( 'wp_async_wp_generate_attachment_metadata', array( $this, 'wp_smush_handle_async' ) );
@@ -179,11 +192,19 @@ if ( ! class_exists( 'WpSmush' ) ) {
179
  //Initialize variables
180
  $this->initialise();
181
 
 
 
 
182
  //Create a clas object, if doesn't exists
183
  if ( empty( $wpsmush_dir ) && class_exists( 'WpSmushDir' ) ) {
184
  $wpsmush_dir = new WpSmushDir();
185
  }
 
186
  $wpsmush_dir->create_table();
 
 
 
 
187
  }
188
 
189
  /**
@@ -196,7 +217,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
196
  */
197
  function do_smushit( $file_path = '' ) {
198
  $errors = new WP_Error();
199
- $dir_name = dirname( $file_path );
200
 
201
  //Check if file exists and the directory is writable
202
  if ( empty( $file_path ) ) {
@@ -589,7 +610,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
589
  }
590
 
591
  //Check if we're restoring the image Or already smushing the image
592
- if ( get_transient( "wp-smush-restore-$ID" ) || get_transient( "smush-in-progress-$ID" ) || get_transient( "wp-smush-restore-$ID" ) ) {
593
  return $meta;
594
  }
595
 
@@ -608,7 +629,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
608
  }
609
 
610
  //Set a transient to avoid multiple request
611
- set_transient( 'smush-in-progress-' . $ID, true, WP_SMUSH_TIMEOUT );
612
 
613
  global $wpsmush_resize, $wpsmush_pngjpg, $wpsmush_settings, $wpsmush_helper;
614
 
@@ -656,7 +677,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
656
  }
657
 
658
  //Delete Transient
659
- delete_transient( 'smush-in-progress-' . $ID );
660
 
661
  return $meta;
662
  }
@@ -671,7 +692,8 @@ if ( ! class_exists( 'WpSmush' ) ) {
671
  * @return bool|array array containing success status, and stats
672
  */
673
  function _post( $file_path, $file_size ) {
674
- global $wpsmushit_admin, $wpsmush_settings;
 
675
 
676
  $data = false;
677
 
@@ -688,13 +710,13 @@ if ( ! class_exists( 'WpSmush' ) ) {
688
  $headers['apikey'] = $api_key;
689
  }
690
 
691
- if ( $this->lossy_enabled && $this->validate_install() ) {
692
  $headers['lossy'] = 'true';
693
  } else {
694
  $headers['lossy'] = 'false';
695
  }
696
 
697
- $headers['exif'] = $this->keep_exif ? 'true' : 'false';
698
 
699
  $api_url = defined( 'WP_SMUSH_API_HTTP' ) ? WP_SMUSH_API_HTTP : WP_SMUSH_API;
700
  $args = array(
@@ -704,7 +726,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
704
  'user-agent' => WP_SMUSH_UA,
705
  );
706
  //Temporary Increase the limit
707
- @ini_set('memory_limit','256M');
708
  $result = wp_remote_post( $api_url, $args );
709
 
710
  unset( $file_data );//free memory
@@ -786,7 +808,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
786
  * the `manage_media_columns` hook.
787
  */
788
  function columns( $defaults ) {
789
- $defaults['smushit'] = 'WP Smush';
790
 
791
  return $defaults;
792
  }
@@ -818,7 +840,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
818
  /**
819
  * Check if user is premium member, check for api key
820
  *
821
- * @return mixed|string
822
  */
823
  function validate_install() {
824
 
@@ -970,9 +992,11 @@ if ( ! class_exists( 'WpSmush' ) ) {
970
  */
971
  function set_status( $id, $echo = true, $text_only = false, $wrapper = true ) {
972
  global $wpsmush_s3_compat;
973
- $status_txt = $button_txt = $stats = '';
974
  $show_button = $show_resmush = false;
975
 
 
 
976
  // If variables are not initialized properly, initialize it.
977
  if ( ! has_action( 'admin_init', array( $this, 'admin_init' ) ) ) {
978
  $this->initialise();
@@ -1005,7 +1029,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
1005
  if ( empty( $wp_resize_savings['bytes'] ) && isset( $wp_smush_data['stats']['size_before'] ) && $wp_smush_data['stats']['size_before'] == 0 && ! empty( $wp_smush_data['sizes'] ) ) {
1006
  $status_txt = __( 'Already Optimized', 'wp-smushit' );
1007
  if ( $show_resmush ) {
1008
- $status_txt .= '<br />' . $this->get_resmsuh_link( $id );
1009
  }
1010
  $show_button = false;
1011
  } else {
@@ -1013,7 +1037,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
1013
  $status_txt = __( 'Already Optimized', 'wp-smushit' );
1014
 
1015
  if ( $show_resmush ) {
1016
- $status_txt .= '<br />' . $this->get_resmsuh_link( $id );
1017
  }
1018
 
1019
  } elseif ( ! empty( $percent ) && ! empty( $bytes_readable ) ) {
@@ -1034,7 +1058,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
1034
  $show_resmush = $this->show_resmush( $id, $wp_smush_data );
1035
 
1036
  if ( $show_resmush ) {
1037
- $status_txt .= '<br />' . $this->get_resmsuh_link( $id );
1038
  }
1039
 
1040
  //Restore Image: Check if we need to show the restore image option
@@ -1043,12 +1067,9 @@ if ( ! class_exists( 'WpSmush' ) ) {
1043
  if ( $show_restore ) {
1044
  if ( $show_resmush ) {
1045
  //Show Separator
1046
- $status_txt .= ' | ';
1047
- } else {
1048
- //Show the link in next line
1049
- $status_txt .= '<br />';
1050
  }
1051
- $status_txt .= $this->get_restore_link( $id );
1052
  }
1053
 
1054
  //Detailed Stats: Show detailed stats if available
@@ -1056,24 +1077,24 @@ if ( ! class_exists( 'WpSmush' ) ) {
1056
 
1057
  if ( $show_resmush || $show_restore ) {
1058
  //Show Separator
1059
- $status_txt .= ' | ';
1060
- } else {
1061
- //Show the link in next line
1062
- $status_txt .= '<br />';
1063
  }
1064
 
1065
  //Detailed Stats Link
1066
- $status_txt .= sprintf( '<a href="#" class="wp-smush-action smush-stats-details wp-smush-title" tooltip="%s">%s [<span class="stats-toggle">+</span>]</a>', esc_html__( "Detailed stats for all the image sizes", "wp-smushit" ), esc_html__( "Smush stats", 'wp-smushit' ) );
1067
 
1068
  //Stats
1069
  $stats = $this->get_detailed_stats( $id, $wp_smush_data, $attachment_data );
1070
 
1071
  if ( ! $text_only ) {
1072
- $status_txt .= $stats;
1073
  }
1074
  }
1075
  }
1076
  }
 
 
 
1077
  /** Super Smush Button */
1078
  //IF current compression is lossy
1079
  if ( ! empty( $wp_smush_data ) && ! empty( $wp_smush_data['stats'] ) ) {
@@ -1086,13 +1107,13 @@ if ( ! class_exists( 'WpSmush' ) ) {
1086
 
1087
  //Check if premium user, compression was lossless, and lossy compression is enabled
1088
  //If we are displaying the resmush option already, no need to show the Super Smush button
1089
- if ( ! $show_resmush && $this->validate_install() && ! $is_lossy && $this->lossy_enabled && $image_type != 'image/gif' ) {
1090
  // the button text
1091
  $button_txt = __( 'Super-Smush', 'wp-smushit' );
1092
  $show_button = true;
1093
  }
1094
 
1095
- } elseif ( get_transient( 'smush-in-progress-' . $id ) ) {
1096
  // the status
1097
  $status_txt = __( 'Smushing in progress..', 'wp-smushit' );
1098
 
@@ -1115,6 +1136,12 @@ if ( ! class_exists( 'WpSmush' ) ) {
1115
  // the button text
1116
  $button_txt = __( 'Smush Now!', 'wp-smushit' );
1117
  }
 
 
 
 
 
 
1118
  if ( $text_only ) {
1119
  //For ajax response
1120
  return array(
@@ -1148,7 +1175,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
1148
  *
1149
  * @return string|void
1150
  */
1151
- function column_html( $id, $status_txt = "", $button_txt = "", $show_button = true, $smushed = false, $echo = true, $wrapper = true ) {
1152
  $allowed_images = array( 'image/jpeg', 'image/jpg', 'image/png', 'image/gif' );
1153
 
1154
  // don't proceed if attachment is not image, or if image is not a jpg, png or gif
@@ -1156,8 +1183,6 @@ if ( ! class_exists( 'WpSmush' ) ) {
1156
  return;
1157
  }
1158
 
1159
- $class = $smushed ? '' : ' hidden';
1160
- $html = '<p class="smush-status' . $class . '">' . $status_txt . '</p>';
1161
  // if we aren't showing the button
1162
  if ( ! $show_button ) {
1163
  if ( $echo ) {
@@ -1175,6 +1200,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
1175
  }
1176
  }
1177
  $mode_class = ! empty( $_POST['mode'] ) && 'grid' == $_POST['mode'] ? ' button-primary' : '';
 
1178
  if ( ! $echo ) {
1179
  $button_class = $wrapper || ! empty( $mode_class ) ? 'button button-primary wp-smush-send' : 'button wp-smush-send';
1180
  $html .= '
@@ -1514,12 +1540,11 @@ if ( ! class_exists( 'WpSmush' ) ) {
1514
  * Load Plugin Modules
1515
  *
1516
  */
1517
- function load_modules() {
 
 
1518
  $this->load_nextgen();
1519
- //Load S3
1520
- if( has_action('aws_init') ) {
1521
- add_action( 'aws_init', array( $this, 'load_s3' ), 120 );
1522
- }
1523
  }
1524
 
1525
  /**
@@ -1534,9 +1559,13 @@ if ( ! class_exists( 'WpSmush' ) ) {
1534
  global $wpsmush_settings;
1535
 
1536
  //Check if integration is Enabled or not
1537
- //Smush NextGen key
1538
- $opt_nextgen = WP_SMUSH_PREFIX . 'nextgen';
1539
- $opt_nextgen_val = $wpsmush_settings->get_setting( $opt_nextgen, false );
 
 
 
 
1540
 
1541
  require_once( WP_SMUSH_DIR . '/lib/class-wp-smush-nextgen.php' );
1542
  // Do not continue if integration not enabled or not a pro user.
@@ -2010,18 +2039,14 @@ if ( ! class_exists( 'WpSmush' ) ) {
2010
  return false;
2011
  }
2012
 
2013
- $url = admin_url( 'upload.php' );
2014
- $url = add_query_arg(
2015
- array(
2016
- 'page' => 'wp-smush-bulk'
2017
- ),
2018
- $url
2019
- );
2020
 
2021
  //Store that we need not redirect again
2022
  add_site_option( 'wp-smush-skip-redirect', true );
2023
 
2024
- exit( wp_redirect( $url ) );
 
2025
  }
2026
 
2027
  /**
@@ -2226,7 +2251,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
2226
  function wp_smush_async() {
2227
 
2228
  //Don't load the Async task, if user not logged in or not in backend
2229
- if ( ! is_user_logged_in() || ! is_admin() ) {
2230
  return;
2231
  }
2232
 
@@ -2248,7 +2273,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
2248
  function wp_smush_handle_async( $id ) {
2249
 
2250
  //If we don't have image id, or the smush is already in progress for the image, return
2251
- if ( empty( $id ) || get_transient( 'smush-in-progress-' . $id ) || get_transient( "wp-smush-restore-$id" ) ) {
2252
  return;
2253
  }
2254
 
@@ -2284,7 +2309,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
2284
  function wp_smush_handle_editor_async( $id, $post_data ) {
2285
 
2286
  //If we don't have image id, or the smush is already in progress for the image, return
2287
- if ( empty( $id ) || get_transient( "smush-in-progress-$id" ) || get_transient( "wp-smush-restore-$id" ) ) {
2288
  return;
2289
  }
2290
 
@@ -2416,9 +2441,102 @@ if ( ! class_exists( 'WpSmush' ) ) {
2416
  update_site_option( WP_SMUSH_PREFIX . 'api_message', $message );
2417
  }
2418
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2419
  /**
2420
  * Add Smush Policy to "Privace Policy" page during creation.
2421
  *
 
2422
  */
2423
  public function add_policy( $content ) {
2424
  $dir_path = get_plugin_dir();
@@ -2436,6 +2554,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
2436
  }
2437
  return $content;
2438
  }
 
2439
  }
2440
 
2441
  global $WpSmush;
@@ -2447,4 +2566,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
2447
  require_once( WP_SMUSH_DIR . 'lib/class-wp-smush-admin.php' );
2448
 
2449
  //Include Directory Smush
2450
- require_once WP_SMUSH_DIR . 'lib/class-wp-smush-dir.php';
 
 
 
86
  */
87
  var $media_type = 'wp';
88
 
89
+ const
90
+ OPTION_NAME = 'smush_option',
91
+ VERSION = WP_SMUSH_VERSION;
92
+
93
+ protected
94
+ $options = null,
95
+
96
+ // default options and values go here
97
+ $defaults = array(
98
+ 'version' => self::VERSION, // this one should not change
99
+ );
100
+
101
  /**
102
  * Constructor
103
  */
133
  //Enqueue Scripts, And Initialize variables
134
  add_action( 'admin_init', array( $this, 'admin_init' ) );
135
 
 
 
 
136
  //Send Smush Stats for pro members
137
  add_filter( 'wpmudev_api_project_extra_data-912164', array( $this, 'send_smush_stats' ) );
138
 
139
  //Send Smush Stats for pro members
140
  add_action( 'wp_ajax_smush_show_warning', array( $this, 'show_warning_ajax' ) );
141
 
142
+ ////Load NextGen Gallery, Instanitate the Async class. if hooked too late or early, auto smush doesn't works, also Load after settings have been saved on init action
143
+ add_action( 'plugins_loaded', array( $this, 'load_libs'), 90 );
144
+
145
+ //Load S3 library
146
+ add_action( 'aws_init', array( $this, 'load_s3' ), 15 );
147
+ add_action( 'as3cf_init', array( $this, 'load_s3' ), 15 );
148
 
149
  //Handle the Async optimisation
150
  add_action( 'wp_async_wp_generate_attachment_metadata', array( $this, 'wp_smush_handle_async' ) );
192
  //Initialize variables
193
  $this->initialise();
194
 
195
+ #Localize version, Update
196
+ $this->getOptions();
197
+
198
  //Create a clas object, if doesn't exists
199
  if ( empty( $wpsmush_dir ) && class_exists( 'WpSmushDir' ) ) {
200
  $wpsmush_dir = new WpSmushDir();
201
  }
202
+ //Run only on wp smush page
203
  $wpsmush_dir->create_table();
204
+
205
+ #Run the Directory Smush table update
206
+ $this->update_dir_path_hash();
207
+
208
  }
209
 
210
  /**
217
  */
218
  function do_smushit( $file_path = '' ) {
219
  $errors = new WP_Error();
220
+ $dir_name = trailingslashit( dirname( $file_path ) );
221
 
222
  //Check if file exists and the directory is writable
223
  if ( empty( $file_path ) ) {
610
  }
611
 
612
  //Check if we're restoring the image Or already smushing the image
613
+ if ( get_option( "wp-smush-restore-$ID", false ) || get_option( "smush-in-progress-$ID", false ) ) {
614
  return $meta;
615
  }
616
 
629
  }
630
 
631
  //Set a transient to avoid multiple request
632
+ update_option( 'smush-in-progress-' . $ID, true );
633
 
634
  global $wpsmush_resize, $wpsmush_pngjpg, $wpsmush_settings, $wpsmush_helper;
635
 
677
  }
678
 
679
  //Delete Transient
680
+ delete_option( 'smush-in-progress-' . $ID );
681
 
682
  return $meta;
683
  }
692
  * @return bool|array array containing success status, and stats
693
  */
694
  function _post( $file_path, $file_size ) {
695
+
696
+ global $wpsmushit_admin, $wpsmush_settings, $wpsmush_helper;
697
 
698
  $data = false;
699
 
710
  $headers['apikey'] = $api_key;
711
  }
712
 
713
+ if ( $this->validate_install() && $wpsmush_settings->settings['lossy'] ) {
714
  $headers['lossy'] = 'true';
715
  } else {
716
  $headers['lossy'] = 'false';
717
  }
718
 
719
+ $headers['exif'] = $wpsmush_settings->settings['keep_exif'] ? 'true' : 'false';
720
 
721
  $api_url = defined( 'WP_SMUSH_API_HTTP' ) ? WP_SMUSH_API_HTTP : WP_SMUSH_API;
722
  $args = array(
726
  'user-agent' => WP_SMUSH_UA,
727
  );
728
  //Temporary Increase the limit
729
+ $wpsmush_helper->increase_memory_limit();
730
  $result = wp_remote_post( $api_url, $args );
731
 
732
  unset( $file_data );//free memory
808
  * the `manage_media_columns` hook.
809
  */
810
  function columns( $defaults ) {
811
+ $defaults['smushit'] = 'Smush';
812
 
813
  return $defaults;
814
  }
840
  /**
841
  * Check if user is premium member, check for api key
842
  *
843
+ * @return mixed|string True if a premium member, false if regular user
844
  */
845
  function validate_install() {
846
 
992
  */
993
  function set_status( $id, $echo = true, $text_only = false, $wrapper = true ) {
994
  global $wpsmush_s3_compat;
995
+ $status_txt = $button_txt = $stats = $links = '';
996
  $show_button = $show_resmush = false;
997
 
998
+ $links = "";
999
+
1000
  // If variables are not initialized properly, initialize it.
1001
  if ( ! has_action( 'admin_init', array( $this, 'admin_init' ) ) ) {
1002
  $this->initialise();
1029
  if ( empty( $wp_resize_savings['bytes'] ) && isset( $wp_smush_data['stats']['size_before'] ) && $wp_smush_data['stats']['size_before'] == 0 && ! empty( $wp_smush_data['sizes'] ) ) {
1030
  $status_txt = __( 'Already Optimized', 'wp-smushit' );
1031
  if ( $show_resmush ) {
1032
+ $links .= $this->get_resmsuh_link( $id );
1033
  }
1034
  $show_button = false;
1035
  } else {
1037
  $status_txt = __( 'Already Optimized', 'wp-smushit' );
1038
 
1039
  if ( $show_resmush ) {
1040
+ $links .= $this->get_resmsuh_link( $id );
1041
  }
1042
 
1043
  } elseif ( ! empty( $percent ) && ! empty( $bytes_readable ) ) {
1058
  $show_resmush = $this->show_resmush( $id, $wp_smush_data );
1059
 
1060
  if ( $show_resmush ) {
1061
+ $links .= $this->get_resmsuh_link( $id );
1062
  }
1063
 
1064
  //Restore Image: Check if we need to show the restore image option
1067
  if ( $show_restore ) {
1068
  if ( $show_resmush ) {
1069
  //Show Separator
1070
+ $links .= ' | ';
 
 
 
1071
  }
1072
+ $links .= $this->get_restore_link( $id );
1073
  }
1074
 
1075
  //Detailed Stats: Show detailed stats if available
1077
 
1078
  if ( $show_resmush || $show_restore ) {
1079
  //Show Separator
1080
+ $links .= ' | ';
 
 
 
1081
  }
1082
 
1083
  //Detailed Stats Link
1084
+ $links .= sprintf( '<a href="#" class="wp-smush-action smush-stats-details wp-smush-title" tooltip="%s">%s [<span class="stats-toggle">+</span>]</a>', esc_html__( "Detailed stats for all the image sizes", "wp-smushit" ), esc_html__( "Smush stats", 'wp-smushit' ) );
1085
 
1086
  //Stats
1087
  $stats = $this->get_detailed_stats( $id, $wp_smush_data, $attachment_data );
1088
 
1089
  if ( ! $text_only ) {
1090
+ $links .= $stats;
1091
  }
1092
  }
1093
  }
1094
  }
1095
+ //Wrap links if not empty
1096
+ $links = !empty( $links ) ? "<div class='smush-status-links'>" . $links . "</div>" : '';
1097
+
1098
  /** Super Smush Button */
1099
  //IF current compression is lossy
1100
  if ( ! empty( $wp_smush_data ) && ! empty( $wp_smush_data['stats'] ) ) {
1107
 
1108
  //Check if premium user, compression was lossless, and lossy compression is enabled
1109
  //If we are displaying the resmush option already, no need to show the Super Smush button
1110
+ if ( ! $show_resmush && ! $is_lossy && $this->lossy_enabled && $image_type != 'image/gif' ) {
1111
  // the button text
1112
  $button_txt = __( 'Super-Smush', 'wp-smushit' );
1113
  $show_button = true;
1114
  }
1115
 
1116
+ } elseif ( get_option( 'smush-in-progress-' . $id, false ) ) {
1117
  // the status
1118
  $status_txt = __( 'Smushing in progress..', 'wp-smushit' );
1119
 
1136
  // the button text
1137
  $button_txt = __( 'Smush Now!', 'wp-smushit' );
1138
  }
1139
+
1140
+ $class = $wp_smush_data ? '' : ' hidden';
1141
+ $status_txt = '<p class="smush-status' . $class . '">' . $status_txt . '</p>';
1142
+
1143
+ $status_txt .= $links;
1144
+
1145
  if ( $text_only ) {
1146
  //For ajax response
1147
  return array(
1175
  *
1176
  * @return string|void
1177
  */
1178
+ function column_html( $id, $html = "", $button_txt = "", $show_button = true, $smushed = false, $echo = true, $wrapper = true ) {
1179
  $allowed_images = array( 'image/jpeg', 'image/jpg', 'image/png', 'image/gif' );
1180
 
1181
  // don't proceed if attachment is not image, or if image is not a jpg, png or gif
1183
  return;
1184
  }
1185
 
 
 
1186
  // if we aren't showing the button
1187
  if ( ! $show_button ) {
1188
  if ( $echo ) {
1200
  }
1201
  }
1202
  $mode_class = ! empty( $_POST['mode'] ) && 'grid' == $_POST['mode'] ? ' button-primary' : '';
1203
+
1204
  if ( ! $echo ) {
1205
  $button_class = $wrapper || ! empty( $mode_class ) ? 'button button-primary wp-smush-send' : 'button wp-smush-send';
1206
  $html .= '
1540
  * Load Plugin Modules
1541
  *
1542
  */
1543
+ function load_libs() {
1544
+
1545
+ //Load Nextgen lib, and initialize wp smush async class
1546
  $this->load_nextgen();
1547
+ $this->wp_smush_async();
 
 
 
1548
  }
1549
 
1550
  /**
1559
  global $wpsmush_settings;
1560
 
1561
  //Check if integration is Enabled or not
1562
+ if ( ! empty( $wpsmush_settings->settings ) ) {
1563
+ $opt_nextgen_val = $wpsmush_settings->settings['nextgen'];
1564
+ } else {
1565
+ //Smush NextGen key
1566
+ $opt_nextgen = WP_SMUSH_PREFIX . 'nextgen';
1567
+ $opt_nextgen_val = $wpsmush_settings->get_setting( $opt_nextgen, false );
1568
+ }
1569
 
1570
  require_once( WP_SMUSH_DIR . '/lib/class-wp-smush-nextgen.php' );
1571
  // Do not continue if integration not enabled or not a pro user.
2039
  return false;
2040
  }
2041
 
2042
+ //Do not use menu_page_url(), by the time menu is not registered and it returns a empty URL, and in turn wp_redirect() gives a fatal error
2043
+ $url = is_multisite() && is_network_admin() ? network_admin_url( 'admin.php?page=smush' ) : admin_url( 'admin.php?page=smush' );
 
 
 
 
 
2044
 
2045
  //Store that we need not redirect again
2046
  add_site_option( 'wp-smush-skip-redirect', true );
2047
 
2048
+ wp_redirect( $url );
2049
+ exit;
2050
  }
2051
 
2052
  /**
2251
  function wp_smush_async() {
2252
 
2253
  //Don't load the Async task, if user not logged in or not in backend
2254
+ if ( ! is_admin() || ! is_user_logged_in() ) {
2255
  return;
2256
  }
2257
 
2273
  function wp_smush_handle_async( $id ) {
2274
 
2275
  //If we don't have image id, or the smush is already in progress for the image, return
2276
+ if ( empty( $id ) || get_option( 'smush-in-progress-' . $id, false ) || get_option( "wp-smush-restore-$id", false ) ) {
2277
  return;
2278
  }
2279
 
2309
  function wp_smush_handle_editor_async( $id, $post_data ) {
2310
 
2311
  //If we don't have image id, or the smush is already in progress for the image, return
2312
+ if ( empty( $id ) || get_option( "smush-in-progress-$id", false ) || get_option( "wp-smush-restore-$id", false ) ) {
2313
  return;
2314
  }
2315
 
2441
  update_site_option( WP_SMUSH_PREFIX . 'api_message', $message );
2442
  }
2443
 
2444
+ /**
2445
+ * Store/Perform updates as per the plugin version
2446
+ *
2447
+ * @uses $wpsmush_helper, $wpdb, $wpsmush_dir
2448
+ *
2449
+ * @return array|mixed|null|void
2450
+ *
2451
+ * Source: Stackoverflow
2452
+ * https://wordpress.stackexchange.com/a/49797/32466
2453
+ *
2454
+ */
2455
+ public function getOptions() {
2456
+
2457
+ // already did the checks
2458
+ if ( isset( $this->options ) ) {
2459
+ return $this->options;
2460
+ }
2461
+
2462
+ // first call, get the options
2463
+ $options = get_option( self::OPTION_NAME );
2464
+
2465
+ // options exist
2466
+ if ( $options !== false ) {
2467
+
2468
+ $new_version = version_compare( $options['version'], self::VERSION, '!=' );
2469
+ // $desync = array_diff_key( $this->defaults, $options ) !== array_diff_key( $options, $this->defaults );
2470
+
2471
+ // update options if version changed
2472
+ if ( $new_version ) {
2473
+
2474
+ $new_options = array();
2475
+
2476
+ // check for new options and set defaults if necessary
2477
+ foreach ( $this->defaults as $option => $value ) {
2478
+ $new_options[ $option ] = isset( $options[ $option ] ) ? $options[ $option ] : $value;
2479
+ }
2480
+
2481
+ // update version info
2482
+ $new_options['version'] = self::VERSION;
2483
+
2484
+ update_option( self::OPTION_NAME, $new_options );
2485
+ $this->options = $new_options;
2486
+
2487
+ // no update was required
2488
+ } else {
2489
+ $this->options = $options;
2490
+ }
2491
+
2492
+ // new install (plugin was just activated)
2493
+ } else {
2494
+ //Store the version details
2495
+ update_option( self::OPTION_NAME, $this->defaults );
2496
+ $this->options = $this->defaults;
2497
+ }
2498
+
2499
+ return $this->options;
2500
+
2501
+ }
2502
+
2503
+ /**
2504
+ * Update path_hash, and store a flag if all the rows were updated
2505
+ *
2506
+ * @return null
2507
+ *
2508
+ * @todo, Stop running this function after 2-3 updates using version check
2509
+ *
2510
+ */
2511
+ function update_dir_path_hash() {
2512
+ //If we've already performed the update
2513
+ if ( get_option( 'smush-directory-path-hash-updated', false ) ) {
2514
+ return null;
2515
+ }
2516
+ global $wpsmush_helper, $wpdb;
2517
+ //Check if Column exists
2518
+ if ( ! $wpsmush_helper->table_column_exists( $wpdb->prefix . 'smush_dir_images', 'path_hash' ) ) {
2519
+ return null;
2520
+ }
2521
+
2522
+ ## Update the rows
2523
+ $query = "UPDATE {$wpdb->prefix}smush_dir_images SET path_hash = MD5(path) WHERE path IS NOT NULL";
2524
+ $wpdb->query( $query );
2525
+
2526
+ ## Check if there are any pending rows that needs to be updated
2527
+ $pending_rows = "SELECT count(*) FROM {$wpdb->prefix}smush_dir_images WHERE path_hash is NULL AND path IS NOT NULL";
2528
+ $index_exists = "SHOW INDEX FROM {$wpdb->prefix}smush_dir_images WHERE KEY_NAME = 'path'";
2529
+ //If all the rows are updated and Index exists
2530
+ if ( ! $wpdb->get_var( $pending_rows ) && $wpdb->get_var( $index_exists ) != null ) {
2531
+ $wpsmush_helper->drop_index( $wpdb->prefix. 'smush_dir_images', 'path' );
2532
+ update_option( 'smush-directory-path-hash-updated', 1 );
2533
+ }
2534
+ }
2535
+
2536
  /**
2537
  * Add Smush Policy to "Privace Policy" page during creation.
2538
  *
2539
+ * @since 2.3.0
2540
  */
2541
  public function add_policy( $content ) {
2542
  $dir_path = get_plugin_dir();
2554
  }
2555
  return $content;
2556
  }
2557
+
2558
  }
2559
 
2560
  global $WpSmush;
2566
  require_once( WP_SMUSH_DIR . 'lib/class-wp-smush-admin.php' );
2567
 
2568
  //Include Directory Smush
2569
+ require_once WP_SMUSH_DIR . 'lib/class-wp-smush-dir.php';
2570
+
2571
+ //Include Plugin Recommendations
2572
+ require_once WP_SMUSH_DIR . 'lib/class-wp-smush-recommender.php';
lib/nextgen-integration/class-wp-smush-nextgen-admin.php CHANGED
@@ -16,10 +16,17 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
16
  class WpSmushNextGenAdmin extends WpSmushNextGen {
17
 
18
  var $total_count = 0;
 
 
 
19
  var $smushed_count = 0;
 
 
 
20
  var $image_count = 0;
21
  var $remaining_count = 0;
22
  var $super_smushed = 0;
 
23
  var $bulk_page_handle;
24
 
25
  //Stores all lossless smushed ids
@@ -27,6 +34,8 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
27
 
28
  function __construct() {
29
 
 
 
30
  //Update the number of columns
31
  add_filter( 'ngg_manage_images_number_of_columns', array(
32
  &$this,
@@ -46,7 +55,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
46
  add_action( 'ngg_delete_picture', array( $this, 'update_nextgen_stats' ) );
47
 
48
  //Update Stats, Lists - if a NextGen Gallery is deleted
49
- // add_action( 'ngg_delete_gallery', array( $this, 'update_stats' ) );
50
 
51
  //Update the Super Smush count, after the smushing
52
  add_action( 'wp_smush_image_optimised_nextgen', array( $this, 'update_lists' ), '', 2 );
@@ -67,8 +76,10 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
67
  * Add a WP Smush page for bulk smush and settings related to Nextgen gallery
68
  */
69
  function wp_smush_bulk_menu() {
 
70
  if ( defined( 'NGGFOLDER' ) ) {
71
- $this->bulk_page_handle = add_submenu_page( NGGFOLDER, esc_html__( 'Bulk WP Smush', 'wp-smushit' ), esc_html__( 'WP Smush', 'wp-smushit' ), 'NextGEN Manage gallery', 'wp-smush-nextgen-bulk', array(
 
72
  &$this,
73
  'wp_smush_bulk'
74
  ) );
@@ -87,9 +98,9 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
87
  function wp_smush_image_column_name( $columns ) {
88
  //Latest next gen takes string, while the earlier WP Smush plugin shows there use to be a array
89
  if ( is_array( $columns ) ) {
90
- $columns['wp_smush_image'] = esc_html__( 'WP Smush', 'wp-smushit' );
91
  } else {
92
- $columns = esc_html__( 'WP Smush', 'wp-smushit' );
93
  }
94
 
95
  return $columns;
@@ -107,6 +118,8 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
107
  //NExtGen Doesn't returns Column name, weird? yeah, right, it is proper because hook is called for the particular column
108
  if ( $column_name == 'wp_smush_image' || $column_name == '' ) {
109
 
 
 
110
  // Registry Object for NextGen Gallery
111
  $registry = C_Component_Registry::get_instance();
112
 
@@ -167,8 +180,14 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
167
 
168
  wp_localize_script( $handle, 'wp_smush_msgs', $wp_smush_msgs );
169
 
170
- //Initialize Stats
171
- $this->setup_stats();
 
 
 
 
 
 
172
 
173
  //Get the Latest Stats
174
  $this->stats = $wpsmushnextgenstats->get_smush_stats();
@@ -180,25 +199,31 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
180
  $smushed = $wpsmushnextgenstats->get_ngg_images();
181
  $smushed = ( ! empty( $smushed ) && is_array( $smushed ) ) ? array_keys( $smushed ) : '';
182
 
 
183
  if ( ! empty( $_REQUEST['ids'] ) ) {
184
  //Sanitize the ids and assign it to a variable
185
  $this->ids = array_map( 'intval', explode( ',', $_REQUEST['ids'] ) );
186
  } else {
187
  $this->ids = $unsmushed;
188
  }
189
- //If premium, Super smush allowed, all images are smushed, localize lossless smushed ids for bulk compression
190
- if ( $resmush_ids = get_option( 'wp-smush-nextgen-resmush-list' ) ) {
191
 
192
- $this->resmush_ids = $resmush_ids;
 
 
 
 
 
193
  }
194
 
195
- $super_smushed = get_option('wp-smush-super_smushed_nextgen', array() );
196
- $super_smushed = !empty( $super_smushed['ids'] ) ? $super_smushed['ids'] : array();
 
 
197
 
198
  //Array of all smushed, unsmushed and lossless ids
199
  $data = array(
200
  'count_smushed' => $this->smushed_count,
201
- 'count_supersmushed' => count( $super_smushed ),
202
  'count_total' => $this->total_count,
203
  'count_images' => $this->image_count,
204
  'smushed' => $smushed,
@@ -285,7 +310,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
285
  /**
286
  * Print the column html
287
  *
288
- * @param string $id Media id
289
  * @param string $status_txt Status text
290
  * @param string $button_txt Button label
291
  * @param boolean $show_button Whether to shoe the button
@@ -297,7 +322,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
297
 
298
  $class = $smushed ? '' : ' hidden';
299
  $html = '<p class="smush-status' . $class . '">' . $status_txt . '</p>';
300
- $html .= wp_nonce_field( 'wp_smush_nextgen', '_wp_smush_nonce', '', false );
301
  // if we aren't showing the button
302
  if ( ! $show_button ) {
303
  if ( $echo ) {
@@ -316,7 +341,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
316
  }
317
  if ( ! $echo ) {
318
  $html .= '
319
- <button class="button wp-smush-nextgen-send" data-id="' . $pid . '">
320
  <span>' . $button_txt . '</span>
321
  </button>';
322
  if ( ! $smushed ) {
@@ -329,7 +354,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
329
 
330
  return $html;
331
  } else {
332
- $html .= '<button class="button wp-smush-nextgen-send" data-id="' . $pid . '">
333
  <span>' . $button_txt . '</span>
334
  </button>';
335
  echo $html . $WpSmush->progress_bar();
@@ -340,22 +365,22 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
340
  *
341
  */
342
  function bulk_smush_ui() {
343
- global $wpsmush_bulkui;
344
  //Page Header
345
  $wpsmush_bulkui->smush_page_header(); ?>
346
- <!-- Bulk Smush Progress Bar -->
347
- <div class="wp-smushit-container-left col-half float-l"><?php
348
- //Bulk Smush Container
349
- $this->bulk_smush_container();
350
- ?>
351
- </div>
352
-
353
- <!-- Stats -->
354
- <div class="wp-smushit-container-right col-half float-l"><?php
355
- //Stats
356
- $this->smush_stats_container(); ?>
357
- </div><!-- End Of Smushit Container right -->
358
- </div><?php
359
  $wpsmush_bulkui->smush_page_footer();
360
  }
361
 
@@ -384,47 +409,47 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
384
 
385
  //If there are no images in Media Library
386
  if ( 0 >= $this->total_count ) { ?>
387
- <span class="wp-smush-no-image tc">
388
  <img src="<?php echo WP_SMUSH_URL . 'assets/images/smush-no-media.png'; ?>"
389
- alt="<?php esc_html_e( "No attachments found - Upload some images", "wp-smushit" ); ?>">
390
  </span>
391
- <p class="wp-smush-no-images-content tc roboto-regular"><?php printf( esc_html__( "We haven’t found any images in your %sgallery%s yet, so there’s no smushing to be done! Once you upload images, reload this page and start playing!", "wp-smushit" ), '<a href="' . esc_url( admin_url( 'admin.php?page=ngg_addgallery' ) ) . '">', '</a>' ); ?></p>
392
- <span class="wp-smush-upload-images tc">
393
- <a class="button button-cta"
394
- href="<?php echo esc_url( admin_url( 'admin.php?page=ngg_addgallery' ) ); ?>"><?php esc_html_e( "UPLOAD IMAGES", "wp-smushit" ); ?></a>
395
- </span><?php
396
  } else { ?>
397
- <!-- Hide All done div if there are images pending -->
398
- <div class="wp-smush-notice wp-smush-all-done<?php echo $all_done ? '' : ' hidden' ?>">
399
- <i class="icon-fi-check-tick"></i><?php esc_html_e( "All images are smushed and up to date. Awesome!", "wp-smushit" ); ?>
400
- </div>
401
- <div class="wp-smush-bulk-wrapper <?php echo $all_done ? ' hidden' : ''; ?>"><?php
402
  //If all the images in media library are smushed
403
  //Button Text
404
  $button_content = esc_html__( "BULK SMUSH", "wp-smushit" );
405
  // DO not show the remaining notice if we have resmush ids
406
  ?>
407
- <div class="wp-smush-notice wp-smush-remaining <?php echo count( $this->resmush_ids ) > 0 ? ' hidden' : ''; ?>">
408
  <i class="icon-fi-warning-alert"></i>
409
- <span class="wp-smush-notice-text">
410
  <?php printf( _n( "%s, you have %s%s%d%s attachment%s that needs smushing!", "%s, you have %s%s%d%s attachments%s that need smushing!", $this->remaining_count, "wp-smushit" ), $wpsmushit_admin->get_user_name(), '<strong>', '<span class="wp-smush-remaining-count">', $this->remaining_count, '</span>', '</strong>' ); ?>
411
  </span>
412
- </div>
413
- <button type="button"
414
- class="wp-smush-button wp-smush-nextgen-bulk float-r"><?php echo $button_content; ?></button><?php
415
 
416
  //Enable Super Smush
417
  if ( ! $WpSmush->lossy_enabled ) {
418
  $url = admin_url( 'upload.php' );
419
  $url = add_query_arg(
420
  array(
421
- 'page' => 'wp-smush-bulk#wp-smush-settings-box'
422
  ),
423
  $url
424
  ); ?>
425
- <p class="wp-smush-enable-lossy"><?php printf( esc_html__( "Enable Super-smush in the %sSettings%s area to get even more savings with almost no visible drop in quality.", "wp-smushit" ), '<a href="' . $url .'" target="_blank">', "</a>"); ?></p><?php
426
  } ?>
427
- </div><?php
428
  $wpsmush_bulkui->progress_bar( $this );
429
  }
430
  }
@@ -444,9 +469,9 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
444
  //Container Header
445
  $wpsmush_bulkui->container_header( $class, 'wp-smush-bulk-wrap-box', esc_html__( "BULK SMUSH", "wp-smushit" ), $smush_individual_msg ); ?>
446
 
447
- <div class="box-container"><?php
448
- $this->bulk_smush_content(); ?>
449
- </div><?php
450
  echo "</section>";
451
  }
452
 
@@ -460,58 +485,58 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
460
  $smushed_count = ( $resmush_count = count( $this->resmush_ids ) ) > 0 ? ( $this->total_count - ( $resmush_count + $this->remaining_count ) ) : $this->smushed_count;
461
 
462
  $button = '<span class="spinner"></span><button tooltip="' . esc_html__( "Lets you check if any images can be further optimized. Useful after changing settings.", "wp-smushit" ) . '" data-type="nextgen" class="wp-smush-title button button-grey button-small wp-smush-scan">' . esc_html__( "RE-CHECK IMAGES", "wp-smushit" ) . '</button>';
463
- $wpsmush_bulkui->container_header( 'smush-stats-wrapper', 'wp-smush-stats-box', esc_html__( "STATS", "wp-smushit" ), $button );?>
464
-
465
- <div class="box-content">
466
- <div class="row smush-total-savings smush-total-reduction-percent">
467
-
468
- <div class="wp-smush-current-progress">
469
-
470
- <div class="wp-smush-count-total">
471
- <div class="wp-smush-smush-stats-wrapper">
472
- <span class="wp-smush-total-optimised"><?php echo $this->image_count; ?></span>
473
- </div>
474
- <span class="total-stats-label"><?php esc_html_e( "Images smushed", "wp-smushit" ); ?></span>
475
- </div>
476
- </div>
477
- </div>
478
- <hr />
479
- <div class="row wp-smush-savings">
480
- <span class="float-l wp-smush-stats-label"><?php esc_html_e("Total savings", "wp-smushit");?></span>
481
- <span class="float-r wp-smush-stats">
482
  <span class="wp-smush-stats-percent"><?php echo $this->stats['percent'] > 0 ? number_format_i18n( $this->stats['percent'], 1, '.', '' ) : 0; ?></span>%
483
  <span class="wp-smush-stats-sep">/</span>
484
  <span class="wp-smush-stats-human">
485
  <?php echo $this->stats['human'] > 0 ? $this->stats['human'] : "0MB"; ?>
486
  </span>
487
  </span>
488
- </div>
489
  <?php
490
  //Nonce Field for Ajax requests
491
  echo wp_nonce_field( 'save_wp_smush_options', 'wp_smush_options_nonce', '', false );
492
  if ( apply_filters( 'wp_smush_show_nextgen_lossy_stats', true ) ) { ?>
493
- <hr>
494
- <div class="row super-smush-attachments">
495
- <span class="float-l wp-smush-stats-label">
496
  <strong><?php esc_html_e( "Super-smushed images", "wp-smushit" ); ?></strong>
497
  </span>
498
- <span class="float-r wp-smush-stats">
499
  <?php
500
  if ( $WpSmush->lossy_enabled ) {
501
- $count = $wpsmush_db->super_smushed_count( 'nextgen', $wpsmushnextgenstats->get_ngg_images( 'smushed' ) );
502
- echo '<span class="smushed-count">' . $count . '</span>/' . $this->total_count;
503
  } else {
504
  printf( esc_html__( "%sDISABLED%s", "wp-smushit" ), '<span class="wp-smush-lossy-disabled">', '</span>' );
505
  } ?>
506
  </span>
507
- </div><?php
508
  }
509
  /**
510
  * Allows you to output any content within the stats box at the end
511
  */
512
  do_action( 'wp_smush_after_stats' );
513
  ?>
514
- </div><?php
515
  echo "</section>";
516
  }
517
 
@@ -591,35 +616,67 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
591
  /**
592
  * Initialize NextGen Gallery Stats
593
  */
594
- function setup_stats() {
595
  global $wpsmushnextgenstats;
596
 
597
  $smushed_images = $wpsmushnextgenstats->get_ngg_images( 'smushed' );
598
 
 
 
 
 
 
 
 
 
 
 
 
599
  //Set the counts
600
- $this->total_count = $wpsmushnextgenstats->total_count();
601
- $this->image_count = $this->get_image_count( $smushed_images );
602
- $this->smushed_count = $smushed_images && is_array( $smushed_images ) ? count( $smushed_images ) : $smushed_images;
 
 
 
 
 
603
  $this->remaining_count = $wpsmushnextgenstats->get_ngg_images( 'unsmushed', true );
604
  }
605
 
606
  /**
607
  * Get the image count for nextgen images
608
  *
609
- * @param array $smushed_images
 
 
610
  *
611
  * @return int
612
  */
613
- function get_image_count( $smushed_images = array() ) {
614
- if ( empty( $smushed_images ) || ! is_array( $smushed_images ) ) {
615
  return 0;
616
  }
 
617
  $image_count = 0;
618
- foreach ( $smushed_images as $image ) {
 
 
 
 
 
 
 
619
  //If there are no smush stats, skip
620
  if ( empty( $image['wp_smush'] ) ) {
621
  continue;
622
  }
 
 
 
 
 
 
623
  //Get the image count
624
  if ( ! empty( $image['wp_smush']['sizes'] ) ) {
625
  $image_count += count( $image['wp_smush']['sizes'] );
@@ -630,7 +687,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
630
  }
631
 
632
  /**
633
- * Combine the resizing stats and smush stats
634
  *
635
  * @param $metadata
636
  *
@@ -656,7 +713,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
656
  //Round off
657
  $smush_stats['stats']['percent'] = round( $smush_stats['stats']['percent'], 2 );
658
 
659
- if( !empty( $smush_stats['sizes']['full'] ) ) {
660
  //Full Image
661
  $smush_stats['sizes']['full']['bytes'] = ! empty( $resize_savings['bytes'] ) ? $smush_stats['sizes']['full']['bytes'] + $resize_savings['bytes'] : $smush_stats['sizes']['full']['bytes'];
662
  $smush_stats['sizes']['full']['size_before'] = ! empty( $resize_savings['size_before'] ) ? $smush_stats['sizes']['full']['size_before'] + $resize_savings['size_before'] : $smush_stats['sizes']['full']['size_before'];
@@ -664,25 +721,34 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
664
  $smush_stats['sizes']['full']['percent'] = ! empty( $smush_stats['sizes']['full']['bytes'] ) && $smush_stats['sizes']['full']['size_before'] > 0 ? ( $smush_stats['sizes']['full']['bytes'] / $smush_stats['sizes']['full']['size_before'] ) * 100 : $smush_stats['sizes']['full']['percent'];
665
 
666
  $smush_stats['sizes']['full']['percent'] = round( $smush_stats['sizes']['full']['percent'], 2 );
667
- }else{
668
  $smush_stats['sizes']['full'] = $resize_savings;
669
  }
670
 
671
  $metadata['wp_smush'] = $smush_stats;
 
672
  return $metadata;
673
 
674
  }
675
 
676
- function update_stats( $id = '' ) {
677
- if ( empty( $id ) ) {
678
- return;
679
- }
680
- //Get the list of images for Gallery
681
- if ( class_exists( 'C_Image_Mapper' ) ) {
682
- $image_mapper = C_Image_Mapper::get_instance();
683
- $images = $image_mapper->find_all_for_gallery( $id );
 
 
 
 
684
  }
685
- exit;
 
 
 
 
686
  }
687
 
688
  }//End of Class
16
  class WpSmushNextGenAdmin extends WpSmushNextGen {
17
 
18
  var $total_count = 0;
19
+ /*
20
+ * @var int $smushed_count Count of images ( Attachments ), Does not includes additional sizes that might have been created
21
+ */
22
  var $smushed_count = 0;
23
+ /*
24
+ * @var int $image_count Includes the count of different sizes an image might have
25
+ */
26
  var $image_count = 0;
27
  var $remaining_count = 0;
28
  var $super_smushed = 0;
29
+ var $smushed = array();
30
  var $bulk_page_handle;
31
 
32
  //Stores all lossless smushed ids
34
 
35
  function __construct() {
36
 
37
+ global $wpsmushnextgenstats;
38
+
39
  //Update the number of columns
40
  add_filter( 'ngg_manage_images_number_of_columns', array(
41
  &$this,
55
  add_action( 'ngg_delete_picture', array( $this, 'update_nextgen_stats' ) );
56
 
57
  //Update Stats, Lists - if a NextGen Gallery is deleted
58
+ add_action( 'ngg_delete_gallery', array( $wpsmushnextgenstats, 'update_stats_cache' ) );
59
 
60
  //Update the Super Smush count, after the smushing
61
  add_action( 'wp_smush_image_optimised_nextgen', array( $this, 'update_lists' ), '', 2 );
76
  * Add a WP Smush page for bulk smush and settings related to Nextgen gallery
77
  */
78
  function wp_smush_bulk_menu() {
79
+ global $WpSmush;
80
  if ( defined( 'NGGFOLDER' ) ) {
81
+ $title = $WpSmush->validate_install() ? esc_html__( "Smush Pro", "wp-smushit" ) : esc_html__( "Smush", "wp-smushit" );
82
+ $this->bulk_page_handle = add_submenu_page( NGGFOLDER, $title, $title, 'NextGEN Manage gallery', 'wp-smush-nextgen-bulk', array(
83
  &$this,
84
  'wp_smush_bulk'
85
  ) );
98
  function wp_smush_image_column_name( $columns ) {
99
  //Latest next gen takes string, while the earlier WP Smush plugin shows there use to be a array
100
  if ( is_array( $columns ) ) {
101
+ $columns['wp_smush_image'] = esc_html__( 'Smush', 'wp-smushit' );
102
  } else {
103
+ $columns = esc_html__( 'Smush', 'wp-smushit' );
104
  }
105
 
106
  return $columns;
118
  //NExtGen Doesn't returns Column name, weird? yeah, right, it is proper because hook is called for the particular column
119
  if ( $column_name == 'wp_smush_image' || $column_name == '' ) {
120
 
121
+ #We're not using our in-house function WpSmushNextGen::get_nextgen_image_from_id()
122
+ #as we're already instializing the nextgen gallery object, we need $storage instance later
123
  // Registry Object for NextGen Gallery
124
  $registry = C_Component_Registry::get_instance();
125
 
180
 
181
  wp_localize_script( $handle, 'wp_smush_msgs', $wp_smush_msgs );
182
 
183
+ //If premium, Super smush allowed, all images are smushed, localize lossless smushed ids for bulk compression
184
+ if ( $resmush_ids = get_option( 'wp-smush-nextgen-resmush-list', array() ) ) {
185
+
186
+ $this->resmush_ids = $resmush_ids;
187
+ }
188
+
189
+ //Setup image counts ( Total, Smushed, Super-smushed, Remaining )
190
+ $this->setup_image_counts();
191
 
192
  //Get the Latest Stats
193
  $this->stats = $wpsmushnextgenstats->get_smush_stats();
199
  $smushed = $wpsmushnextgenstats->get_ngg_images();
200
  $smushed = ( ! empty( $smushed ) && is_array( $smushed ) ) ? array_keys( $smushed ) : '';
201
 
202
+ $this->smushed = $smushed;
203
  if ( ! empty( $_REQUEST['ids'] ) ) {
204
  //Sanitize the ids and assign it to a variable
205
  $this->ids = array_map( 'intval', explode( ',', $_REQUEST['ids'] ) );
206
  } else {
207
  $this->ids = $unsmushed;
208
  }
 
 
209
 
210
+ $this->super_smushed = get_option( 'wp-smush-super_smushed_nextgen', array() );
211
+ $this->super_smushed = ! empty( $this->super_smushed['ids'] ) ? $this->super_smushed['ids'] : array();
212
+
213
+ #If we have images to be resmushed, Update supersmush list
214
+ if ( ! empty( $this->resmush_ids ) && ! empty( $this->super_smushed ) ) {
215
+ $this->super_smushed = array_diff( $this->super_smushed, $this->resmush_ids );
216
  }
217
 
218
+ //If supersmushedimages are more than total, clean it up
219
+ if ( sizeof( $this->super_smushed ) > $this->total_count ) {
220
+ $this->super_smushed = $this->cleanup_super_smush_data();
221
+ }
222
 
223
  //Array of all smushed, unsmushed and lossless ids
224
  $data = array(
225
  'count_smushed' => $this->smushed_count,
226
+ 'count_supersmushed' => count( $this->super_smushed ),
227
  'count_total' => $this->total_count,
228
  'count_images' => $this->image_count,
229
  'smushed' => $smushed,
310
  /**
311
  * Print the column html
312
  *
313
+ * @param string $pid Media id
314
  * @param string $status_txt Status text
315
  * @param string $button_txt Button label
316
  * @param boolean $show_button Whether to shoe the button
322
 
323
  $class = $smushed ? '' : ' hidden';
324
  $html = '<p class="smush-status' . $class . '">' . $status_txt . '</p>';
325
+ $html .= wp_nonce_field( 'wp_smush_nextgen', '_wp_smush_nonce', '', false );
326
  // if we aren't showing the button
327
  if ( ! $show_button ) {
328
  if ( $echo ) {
341
  }
342
  if ( ! $echo ) {
343
  $html .= '
344
+ <button class="button button-primary wp-smush-nextgen-send" data-id="' . $pid . '">
345
  <span>' . $button_txt . '</span>
346
  </button>';
347
  if ( ! $smushed ) {
354
 
355
  return $html;
356
  } else {
357
+ $html .= '<button class="button button-primary wp-smush-nextgen-send" data-id="' . $pid . '">
358
  <span>' . $button_txt . '</span>
359
  </button>';
360
  echo $html . $WpSmush->progress_bar();
365
  *
366
  */
367
  function bulk_smush_ui() {
368
+ global $wpsmush_bulkui;
369
  //Page Header
370
  $wpsmush_bulkui->smush_page_header(); ?>
371
+ <!-- Bulk Smush Progress Bar -->
372
+ <div class="wp-smushit-container-left col-half float-l"><?php
373
+ //Bulk Smush Container
374
+ $this->bulk_smush_container();
375
+ ?>
376
+ </div>
377
+
378
+ <!-- Stats -->
379
+ <div class="wp-smushit-container-right col-half float-l"><?php
380
+ //Stats
381
+ $this->smush_stats_container(); ?>
382
+ </div><!-- End Of Smushit Container right -->
383
+ </div><?php
384
  $wpsmush_bulkui->smush_page_footer();
385
  }
386
 
409
 
410
  //If there are no images in Media Library
411
  if ( 0 >= $this->total_count ) { ?>
412
+ <span class="wp-smush-no-image tc">
413
  <img src="<?php echo WP_SMUSH_URL . 'assets/images/smush-no-media.png'; ?>"
414
+ alt="<?php esc_html_e( "No attachments found - Upload some images", "wp-smushit" ); ?>">
415
  </span>
416
+ <p class="wp-smush-no-images-content tc roboto-regular"><?php printf( esc_html__( "We haven’t found any images in your %sgallery%s yet, so there’s no smushing to be done! Once you upload images, reload this page and start playing!", "wp-smushit" ), '<a href="' . esc_url( admin_url( 'admin.php?page=ngg_addgallery' ) ) . '">', '</a>' ); ?></p>
417
+ <span class="wp-smush-upload-images tc">
418
+ <a class="button button-cta"
419
+ href="<?php echo esc_url( admin_url( 'admin.php?page=ngg_addgallery' ) ); ?>"><?php esc_html_e( "UPLOAD IMAGES", "wp-smushit" ); ?></a>
420
+ </span><?php
421
  } else { ?>
422
+ <!-- Hide All done div if there are images pending -->
423
+ <div class="wp-smush-notice wp-smush-all-done<?php echo $all_done ? '' : ' hidden' ?>">
424
+ <i class="icon-fi-check-tick"></i><?php esc_html_e( "All images are smushed and up to date. Awesome!", "wp-smushit" ); ?>
425
+ </div>
426
+ <div class="wp-smush-bulk-wrapper <?php echo $all_done ? ' hidden' : ''; ?>"><?php
427
  //If all the images in media library are smushed
428
  //Button Text
429
  $button_content = esc_html__( "BULK SMUSH", "wp-smushit" );
430
  // DO not show the remaining notice if we have resmush ids
431
  ?>
432
+ <div class="wp-smush-notice wp-smush-remaining <?php echo count( $this->resmush_ids ) > 0 ? ' hidden' : ''; ?>">
433
  <i class="icon-fi-warning-alert"></i>
434
+ <span class="wp-smush-notice-text">
435
  <?php printf( _n( "%s, you have %s%s%d%s attachment%s that needs smushing!", "%s, you have %s%s%d%s attachments%s that need smushing!", $this->remaining_count, "wp-smushit" ), $wpsmushit_admin->get_user_name(), '<strong>', '<span class="wp-smush-remaining-count">', $this->remaining_count, '</span>', '</strong>' ); ?>
436
  </span>
437
+ </div>
438
+ <button type="button"
439
+ class="wp-smush-button wp-smush-nextgen-bulk float-r"><?php echo $button_content; ?></button><?php
440
 
441
  //Enable Super Smush
442
  if ( ! $WpSmush->lossy_enabled ) {
443
  $url = admin_url( 'upload.php' );
444
  $url = add_query_arg(
445
  array(
446
+ 'page' => 'smush#wp-smush-settings-box'
447
  ),
448
  $url
449
  ); ?>
450
+ <p class="wp-smush-enable-lossy"><?php printf( esc_html__( "Enable Super-smush in the %sSettings%s area to get even more savings with almost no visible drop in quality.", "wp-smushit" ), '<a href="' . $url . '" target="_blank">', "</a>" ); ?></p><?php
451
  } ?>
452
+ </div><?php
453
  $wpsmush_bulkui->progress_bar( $this );
454
  }
455
  }
469
  //Container Header
470
  $wpsmush_bulkui->container_header( $class, 'wp-smush-bulk-wrap-box', esc_html__( "BULK SMUSH", "wp-smushit" ), $smush_individual_msg ); ?>
471
 
472
+ <div class="box-container"><?php
473
+ $this->bulk_smush_content(); ?>
474
+ </div><?php
475
  echo "</section>";
476
  }
477
 
485
  $smushed_count = ( $resmush_count = count( $this->resmush_ids ) ) > 0 ? ( $this->total_count - ( $resmush_count + $this->remaining_count ) ) : $this->smushed_count;
486
 
487
  $button = '<span class="spinner"></span><button tooltip="' . esc_html__( "Lets you check if any images can be further optimized. Useful after changing settings.", "wp-smushit" ) . '" data-type="nextgen" class="wp-smush-title button button-grey button-small wp-smush-scan">' . esc_html__( "RE-CHECK IMAGES", "wp-smushit" ) . '</button>';
488
+ $wpsmush_bulkui->container_header( 'smush-stats-wrapper', 'wp-smush-stats-box', esc_html__( "STATS", "wp-smushit" ), $button ); ?>
489
+
490
+ <div class="box-content">
491
+ <div class="row smush-total-savings smush-total-reduction-percent">
492
+
493
+ <div class="wp-smush-current-progress">
494
+
495
+ <div class="wp-smush-count-total">
496
+ <div class="wp-smush-smush-stats-wrapper">
497
+ <span class="wp-smush-total-optimised"><?php echo $this->image_count; ?></span>
498
+ </div>
499
+ <span class="total-stats-label"><?php esc_html_e( "Images smushed", "wp-smushit" ); ?></span>
500
+ </div>
501
+ </div>
502
+ </div>
503
+ <hr/>
504
+ <div class="row wp-smush-savings">
505
+ <span class="float-l wp-smush-stats-label"><?php esc_html_e( "Total savings", "wp-smushit" ); ?></span>
506
+ <span class="float-r wp-smush-stats">
507
  <span class="wp-smush-stats-percent"><?php echo $this->stats['percent'] > 0 ? number_format_i18n( $this->stats['percent'], 1, '.', '' ) : 0; ?></span>%
508
  <span class="wp-smush-stats-sep">/</span>
509
  <span class="wp-smush-stats-human">
510
  <?php echo $this->stats['human'] > 0 ? $this->stats['human'] : "0MB"; ?>
511
  </span>
512
  </span>
513
+ </div>
514
  <?php
515
  //Nonce Field for Ajax requests
516
  echo wp_nonce_field( 'save_wp_smush_options', 'wp_smush_options_nonce', '', false );
517
  if ( apply_filters( 'wp_smush_show_nextgen_lossy_stats', true ) ) { ?>
518
+ <hr>
519
+ <div class="row super-smush-attachments">
520
+ <span class="float-l wp-smush-stats-label">
521
  <strong><?php esc_html_e( "Super-smushed images", "wp-smushit" ); ?></strong>
522
  </span>
523
+ <span class="float-r wp-smush-stats">
524
  <?php
525
  if ( $WpSmush->lossy_enabled ) {
526
+ $smushed_image_count = is_array( $this->super_smushed ) ? sizeof( $this->super_smushed ) : 0;
527
+ echo '<span class="smushed-count">' . $smushed_image_count . '</span>/' . $this->total_count;
528
  } else {
529
  printf( esc_html__( "%sDISABLED%s", "wp-smushit" ), '<span class="wp-smush-lossy-disabled">', '</span>' );
530
  } ?>
531
  </span>
532
+ </div><?php
533
  }
534
  /**
535
  * Allows you to output any content within the stats box at the end
536
  */
537
  do_action( 'wp_smush_after_stats' );
538
  ?>
539
+ </div><?php
540
  echo "</section>";
541
  }
542
 
616
  /**
617
  * Initialize NextGen Gallery Stats
618
  */
619
+ function setup_image_counts() {
620
  global $wpsmushnextgenstats;
621
 
622
  $smushed_images = $wpsmushnextgenstats->get_ngg_images( 'smushed' );
623
 
624
+ //Check if resmush ids are not set, get it
625
+ if ( empty( $this->resmush_ids ) ) {
626
+ $this->resmush_ids = get_option( 'wp-smush-nextgen-resmush-list', array() );
627
+ }
628
+
629
+ //I fwe have images to be resmushed, exclude it
630
+ if ( ! empty( $this->resmush_ids ) ) {
631
+ //Get the Smushed images, exlude resmush ids
632
+ $smushed_images = array_diff_key( $smushed_images, array_flip( $this->resmush_ids ) );
633
+ }
634
+
635
  //Set the counts
636
+ $this->total_count = $wpsmushnextgenstats->total_count();
637
+
638
+ //Includes the count of different sizes an image might have
639
+ $this->image_count = $this->get_image_count( $smushed_images );
640
+
641
+ //Count of images ( Attachments ), Does not includes additioanl sizes that might have been created
642
+ $this->smushed_count = isset( $smushed_images ) && is_array( $smushed_images ) ? sizeof( $smushed_images ) : $smushed_images;
643
+
644
  $this->remaining_count = $wpsmushnextgenstats->get_ngg_images( 'unsmushed', true );
645
  }
646
 
647
  /**
648
  * Get the image count for nextgen images
649
  *
650
+ * @param array $images Array of attachments to get the image count for
651
+ *
652
+ * @param bool $exclude_resmush_ids Whether to exclude resmush ids or not
653
  *
654
  * @return int
655
  */
656
+ function get_image_count( $images = array(), $exclude_resmush_ids = true ) {
657
+ if ( empty( $images ) || ! is_array( $images ) ) {
658
  return 0;
659
  }
660
+
661
  $image_count = 0;
662
+ #$image in here is expected to be metadata array
663
+ foreach ( $images as $image_k => $image ) {
664
+ #Get image object if not there already
665
+ if ( ! is_array( $image ) ) {
666
+ $image = $this->get_nextgen_image_from_id( $image );
667
+ //Get the meta
668
+ $image = !empty( $image->meta_data ) ? $image->meta_data : '';
669
+ }
670
  //If there are no smush stats, skip
671
  if ( empty( $image['wp_smush'] ) ) {
672
  continue;
673
  }
674
+
675
+ //If resmush ids needs to be excluded
676
+ if ( $exclude_resmush_ids && ( ! empty( $this->resmush_ids ) && in_array( $image_k, $this->resmush_ids ) ) ) {
677
+ continue;
678
+ }
679
+
680
  //Get the image count
681
  if ( ! empty( $image['wp_smush']['sizes'] ) ) {
682
  $image_count += count( $image['wp_smush']['sizes'] );
687
  }
688
 
689
  /**
690
+ * Combine the resizing stats and smush stats , One time operation - performed during the image optimization
691
  *
692
  * @param $metadata
693
  *
713
  //Round off
714
  $smush_stats['stats']['percent'] = round( $smush_stats['stats']['percent'], 2 );
715
 
716
+ if ( ! empty( $smush_stats['sizes']['full'] ) ) {
717
  //Full Image
718
  $smush_stats['sizes']['full']['bytes'] = ! empty( $resize_savings['bytes'] ) ? $smush_stats['sizes']['full']['bytes'] + $resize_savings['bytes'] : $smush_stats['sizes']['full']['bytes'];
719
  $smush_stats['sizes']['full']['size_before'] = ! empty( $resize_savings['size_before'] ) ? $smush_stats['sizes']['full']['size_before'] + $resize_savings['size_before'] : $smush_stats['sizes']['full']['size_before'];
721
  $smush_stats['sizes']['full']['percent'] = ! empty( $smush_stats['sizes']['full']['bytes'] ) && $smush_stats['sizes']['full']['size_before'] > 0 ? ( $smush_stats['sizes']['full']['bytes'] / $smush_stats['sizes']['full']['size_before'] ) * 100 : $smush_stats['sizes']['full']['percent'];
722
 
723
  $smush_stats['sizes']['full']['percent'] = round( $smush_stats['sizes']['full']['percent'], 2 );
724
+ } else {
725
  $smush_stats['sizes']['full'] = $resize_savings;
726
  }
727
 
728
  $metadata['wp_smush'] = $smush_stats;
729
+
730
  return $metadata;
731
 
732
  }
733
 
734
+ /**
735
+ * Cleanup Super-smush images array against the all ids in gallery
736
+ *
737
+ * @return array|mixed|void
738
+ */
739
+ function cleanup_super_smush_data() {
740
+ global $wpsmushnextgenstats;
741
+ $super_smushed = get_option( 'wp-smush-super_smushed_nextgen', array() );
742
+ $ids = $wpsmushnextgenstats->total_count( false, true );
743
+
744
+ if ( is_array( $super_smushed ) && !empty( $super_smushed['ids'] ) && is_array( $ids ) ) {
745
+ $super_smushed['ids'] = array_intersect( $super_smushed['ids'], $ids );
746
  }
747
+
748
+ update_option( 'wp-smush-super_smushed_nextgen', $super_smushed );
749
+
750
+ return $super_smushed['ids'];
751
+
752
  }
753
 
754
  }//End of Class
lib/nextgen-integration/class-wp-smush-nextgen-bulk.php CHANGED
@@ -35,13 +35,12 @@ if ( ! class_exists( 'WPSmushNextGenBulk' ) ) {
35
  if ( ! empty( $_REQUEST['is_bulk_resmush'] ) && $_REQUEST['is_bulk_resmush'] ) {
36
  $wpsmushit_admin->update_resmush_list( $atchmnt_id, 'wp-smush-nextgen-resmush-list' );
37
  }
38
- }
39
-
40
- $stats['is_lossy'] = !empty( $smush['stats'] ) ? $smush['stats']['lossy'] : 0;
41
 
42
- //Size before and after smush
43
- $stats['size_before'] = !empty( $smush['stats'] ) ? $smush['stats']['size_before'] : 0;
44
- $stats['size_after'] = !empty( $smush['stats'] ) ? $smush['stats']['size_after'] : 0;
 
45
 
46
  //Get the resmush ids list
47
  if ( empty( $wpsmushnextgenadmin->resmush_ids ) ) {
35
  if ( ! empty( $_REQUEST['is_bulk_resmush'] ) && $_REQUEST['is_bulk_resmush'] ) {
36
  $wpsmushit_admin->update_resmush_list( $atchmnt_id, 'wp-smush-nextgen-resmush-list' );
37
  }
38
+ $stats['is_lossy'] = !empty( $smush['stats'] ) ? $smush['stats']['lossy'] : 0;
 
 
39
 
40
+ //Size before and after smush
41
+ $stats['size_before'] = !empty( $smush['stats'] ) ? $smush['stats']['size_before'] : 0;
42
+ $stats['size_after'] = !empty( $smush['stats'] ) ? $smush['stats']['size_after'] : 0;
43
+ }
44
 
45
  //Get the resmush ids list
46
  if ( empty( $wpsmushnextgenadmin->resmush_ids ) ) {
lib/nextgen-integration/class-wp-smush-nextgen-stats.php CHANGED
@@ -33,7 +33,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
33
  add_action( 'wp_smush_nextgen_image_stats', array( $this, 'update_cache' ) );
34
 
35
  //Add the resizing stats to Global stats
36
- add_action( 'wp_smush_image_nextgen_resized', array( $this, 'update_stats' ), '', 2 );
37
 
38
  //Get the stats for single image, update the global stats
39
  add_action( 'wp_smush_nextgen_image_stats', array( $this, 'update_stats' ), '', 2 );
@@ -55,8 +55,10 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
55
  * @param bool $force_refresh Optional. Whether to force the cache to be refreshed.
56
  * Default false.
57
  *
58
- * @return int|WP_Error Total Image count,
59
- * WP_Error object otherwise.
 
 
60
  */
61
  function total_count( $force_refresh = false, $return_ids = false ) {
62
  // Check for the wp_smush_images in the 'nextgen' group.
@@ -76,13 +78,6 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
76
  return $return_ids ? $attachment_ids : count( $attachment_ids );
77
  }
78
 
79
- /**
80
- *
81
- *
82
- * @param bool $return_ids Whether to return the ids array, set to false by default
83
- *
84
- * @return int|mixed|void Returns the images ids or the count
85
- */
86
  /**
87
  * Returns the ngg images list(id and meta ) or count
88
  *
@@ -190,7 +185,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
190
  $percent = $percent < 0 ? 0 : $percent;
191
 
192
  if ( isset( $wp_smush_data['stats']['size_before'] ) && $wp_smush_data['stats']['size_before'] == 0 && ! empty( $wp_smush_data['sizes'] ) ) {
193
- $status_txt = __( 'Already Optimized', 'wp-smushit' );
194
  } else {
195
  if ( $bytes == 0 || $percent == 0 ) {
196
  $status_txt = __( 'Already Optimized', 'wp-smushit' );
@@ -269,7 +264,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
269
  $opt_lossy_val = $wpsmush_settings->settings['lossy'];
270
 
271
  //Check if premium user, compression was lossless, and lossy compression is enabled
272
- if ( !$show_resmush && $this->is_pro_user && ! $is_lossy && $opt_lossy_val && ! empty( $image_type ) && $image_type != 'image/gif' ) {
273
  // the button text
274
  $button_txt = __( 'Super-Smush', 'wp-smushit' );
275
  $show_button = true;
@@ -297,17 +292,12 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
297
  */
298
  function update_stats( $image_id, $stats ) {
299
 
300
- global $WpSmush;
301
-
302
  $stats = ! empty( $stats['stats'] ) ? $stats['stats'] : '';
303
 
304
  $smush_stats = get_option( 'wp_smush_stats_nextgen', array() );
305
 
306
  if ( ! empty( $stats ) ) {
307
 
308
- //Compression Bytes
309
- $smush_stats['bytes'] = ! empty( $smush_stats['bytes'] ) ? ( $smush_stats['bytes'] + $stats['bytes'] ) : $stats['bytes'];
310
-
311
  //Human Readable
312
  $smush_stats['human'] = ! empty( $smush_stats['bytes'] ) ? size_format( $smush_stats['bytes'], 1 ) : '';
313
 
@@ -317,14 +307,13 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
317
  //Size of image after compression
318
  $smush_stats['size_after'] = ! empty( $smush_stats['size_after'] ) ? ( $smush_stats['size_after'] + $stats['size_after'] ) : $stats['size_after'];
319
 
 
 
320
  //Compression Percentage
321
- $smush_stats['percent'] = ! empty( $smush_stats['size_before'] ) && !empty( $smush_stats['size_after'] ) && $smush_stats['size_before'] > 0 ? ( $smush_stats['bytes'] / $smush_stats['size_before'] ) * 100 : $stats['percent'];
322
  }
323
 
324
  update_option( 'wp_smush_stats_nextgen', $smush_stats, false );
325
-
326
- //Cahce the results, we don't need a timed cache expiration.
327
- wp_cache_set( 'wp_smush_stats_nextgen', $smush_stats, 'nextgen' );
328
  }
329
 
330
  /**
@@ -355,12 +344,48 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
355
  $smush_stats['size_after'] = ! empty( $smush_stats['size_after'] ) ? ( $smush_stats['size_after'] + $stats['size_after'] ) : $stats['size_after'];
356
 
357
  //Compression Percentage
358
- $smush_stats['percent'] = ! empty( $smush_stats['size_before'] ) && !empty( $smush_stats['size_after'] ) && $smush_stats['size_before'] > 0 ? ( $smush_stats['bytes'] / $smush_stats['size_before'] ) * 100 : $stats['percent'];
359
  }
360
  update_option( 'wp_smush_stats_nextgen', $smush_stats, false );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
 
362
- //Cahce the results, we don't need a timed cache expiration.
363
- wp_cache_set( 'wp_smush_stats_nextgen', $smush_stats, 'nextgen' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
364
  }
365
 
366
  /**
@@ -369,6 +394,8 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
369
  */
370
  function get_smush_stats() {
371
 
 
 
372
  $smushed_stats = array(
373
  'savings_bytes' => 0,
374
  'size_before' => 0,
@@ -377,24 +404,13 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
377
  );
378
 
379
  //Clear up the stats
380
- if( 0 == $this->total_count() ) {
381
- delete_option('wp_smush_stats_nextgen');
382
- wp_cache_delete( 'wp_smush_stats_nextgen', 'nextgen' );
383
  }
384
 
385
- // Check for the wp_smush_images_smushed in the 'nextgen' group.
386
- $stats = wp_cache_get( 'wp_smush_stats_nextgen', 'nextgen' );
387
-
388
- // If nothing is found, build the object.
389
- if ( false === $stats ) {
390
- // Check for the wp_smush_images in the 'nextgen' group.
391
- $stats = get_option( 'wp_smush_stats_nextgen', array() );
392
 
393
- if ( ! is_wp_error( $stats ) ) {
394
- // In this case we don't need a timed cache expiration.
395
- wp_cache_set( 'wp_smush_stats_nextgen', $stats, 'nextgen' );
396
- }
397
- }
398
  if ( empty( $stats['bytes'] ) || $stats['bytes'] < 0 ) {
399
  $stats['bytes'] = 0;
400
  }
@@ -410,6 +426,13 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
410
 
411
  $smushed_stats = array_merge( $smushed_stats, $stats );
412
 
 
 
 
 
 
 
 
413
  return $smushed_stats;
414
  }
415
 
@@ -422,6 +445,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
422
 
423
  /**
424
  * Returns the Stats for a image formatted into a nice table
 
425
  * @param $image_id
426
  * @param $wp_smush_data
427
  * @param $attachment_metadata
@@ -453,7 +477,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
453
  if ( ! empty( $skipped ) ) {
454
  foreach ( $skipped as $img_data ) {
455
  $skip_class = $img_data['reason'] == 'size_limit' ? ' error' : '';
456
- $stats .= '<tr>
457
  <td>' . strtoupper( $img_data['size'] ) . '</td>
458
  <td class="smush-skipped' . $skip_class . '">' . $WpSmush->skip_reason( $img_data['reason'] ) . '</td>
459
  </tr>';
@@ -476,7 +500,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
476
  $stats .= " ( $size_value->percent% )";
477
  }
478
 
479
- $stats .='</td>
480
  </tr>';
481
  }
482
  $stats .= '</tbody>
@@ -553,6 +577,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
553
 
554
  /**
555
  * Check if image can be resmushed
 
556
  * @param $status_txt
557
  *
558
  * @return string
@@ -576,6 +601,159 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
576
  return $show_resmush;
577
  }
578
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
579
  }//End of Class
580
 
581
  }//End Of if class not exists
33
  add_action( 'wp_smush_nextgen_image_stats', array( $this, 'update_cache' ) );
34
 
35
  //Add the resizing stats to Global stats
36
+ add_action( 'wp_smush_image_nextgen_resized', array( $this, 'update_stats' ), '', 2 );
37
 
38
  //Get the stats for single image, update the global stats
39
  add_action( 'wp_smush_nextgen_image_stats', array( $this, 'update_stats' ), '', 2 );
55
  * @param bool $force_refresh Optional. Whether to force the cache to be refreshed.
56
  * Default false.
57
  *
58
+ * @param bool $return_ids Whether to return the ids array, set to false by default
59
+ *
60
+ * @return int|mixed|void Returns the images ids or the count
61
+ *
62
  */
63
  function total_count( $force_refresh = false, $return_ids = false ) {
64
  // Check for the wp_smush_images in the 'nextgen' group.
78
  return $return_ids ? $attachment_ids : count( $attachment_ids );
79
  }
80
 
 
 
 
 
 
 
 
81
  /**
82
  * Returns the ngg images list(id and meta ) or count
83
  *
185
  $percent = $percent < 0 ? 0 : $percent;
186
 
187
  if ( isset( $wp_smush_data['stats']['size_before'] ) && $wp_smush_data['stats']['size_before'] == 0 && ! empty( $wp_smush_data['sizes'] ) ) {
188
+ $status_txt = __( 'Already Optimized', 'wp-smushit' );
189
  } else {
190
  if ( $bytes == 0 || $percent == 0 ) {
191
  $status_txt = __( 'Already Optimized', 'wp-smushit' );
264
  $opt_lossy_val = $wpsmush_settings->settings['lossy'];
265
 
266
  //Check if premium user, compression was lossless, and lossy compression is enabled
267
+ if ( ! $show_resmush && $this->is_pro_user && ! $is_lossy && $opt_lossy_val && ! empty( $image_type ) && $image_type != 'image/gif' ) {
268
  // the button text
269
  $button_txt = __( 'Super-Smush', 'wp-smushit' );
270
  $show_button = true;
292
  */
293
  function update_stats( $image_id, $stats ) {
294
 
 
 
295
  $stats = ! empty( $stats['stats'] ) ? $stats['stats'] : '';
296
 
297
  $smush_stats = get_option( 'wp_smush_stats_nextgen', array() );
298
 
299
  if ( ! empty( $stats ) ) {
300
 
 
 
 
301
  //Human Readable
302
  $smush_stats['human'] = ! empty( $smush_stats['bytes'] ) ? size_format( $smush_stats['bytes'], 1 ) : '';
303
 
307
  //Size of image after compression
308
  $smush_stats['size_after'] = ! empty( $smush_stats['size_after'] ) ? ( $smush_stats['size_after'] + $stats['size_after'] ) : $stats['size_after'];
309
 
310
+ $smush_stats['bytes'] = ! empty( $smush_stats['size_before'] ) && !empty( $smush_stats['size_after'] ) ? ( $smush_stats['size_before'] - $smush_stats['size_after'] ) : 0;
311
+
312
  //Compression Percentage
313
+ $smush_stats['percent'] = ! empty( $smush_stats['size_before'] ) && ! empty( $smush_stats['size_after'] ) && $smush_stats['size_before'] > 0 ? ( $smush_stats['bytes'] / $smush_stats['size_before'] ) * 100 : $stats['percent'];
314
  }
315
 
316
  update_option( 'wp_smush_stats_nextgen', $smush_stats, false );
 
 
 
317
  }
318
 
319
  /**
344
  $smush_stats['size_after'] = ! empty( $smush_stats['size_after'] ) ? ( $smush_stats['size_after'] + $stats['size_after'] ) : $stats['size_after'];
345
 
346
  //Compression Percentage
347
+ $smush_stats['percent'] = ! empty( $smush_stats['size_before'] ) && ! empty( $smush_stats['size_after'] ) && $smush_stats['size_before'] > 0 ? ( $smush_stats['bytes'] / $smush_stats['size_before'] ) * 100 : $stats['percent'];
348
  }
349
  update_option( 'wp_smush_stats_nextgen', $smush_stats, false );
350
+ }
351
+
352
+ /**
353
+ * Get the attachment stats for a image
354
+ *
355
+ * @param $id
356
+ *
357
+ * @return null
358
+ */
359
+ function get_attachment_stats( $id ) {
360
+
361
+ //We'll get the image object in $id itself, else fetch it using Gallery Storage
362
+ if ( is_object( $id ) || is_array( $id ) ) {
363
+ $image = $id;
364
+ } else {
365
+ // Registry Object for NextGen Gallery
366
+ $registry = C_Component_Registry::get_instance();
367
+
368
+ //Gallery Storage Object
369
+ $storage = $registry->get_utility( 'I_Gallery_Storage' );
370
 
371
+ // get an image object
372
+ $image = $storage->object->_image_mapper->find( $id );
373
+ }
374
+
375
+ //Check if we've smush stats, return it
376
+ if ( is_object( $image ) ) {
377
+ if ( ! empty( $image->meta_data ) && ! empty( $image->meta_data['wp_smush'] ) ) {
378
+ return $image->meta_data['wp_smush'];
379
+ }
380
+ } elseif ( is_array( $image ) ) {
381
+ if ( ! empty( $image['wp_smush'] ) ) {
382
+ return $image['wp_smush'];
383
+ } else if ( ! empty( $image['meta_data'] ) && ! empty( $image['meta_data']['wp_smush'] ) ) {
384
+ return $image['meta_data']['wp_smush'];
385
+ }
386
+ }
387
+
388
+ return null;
389
  }
390
 
391
  /**
394
  */
395
  function get_smush_stats() {
396
 
397
+ global $wpsmushnextgenadmin;
398
+
399
  $smushed_stats = array(
400
  'savings_bytes' => 0,
401
  'size_before' => 0,
404
  );
405
 
406
  //Clear up the stats
407
+ if ( 0 == $this->total_count() ) {
408
+ delete_option( 'wp_smush_stats_nextgen' );
 
409
  }
410
 
411
+ // Check for the wp_smush_images in the 'nextgen' group.
412
+ $stats = get_option( 'wp_smush_stats_nextgen', array() );
 
 
 
 
 
413
 
 
 
 
 
 
414
  if ( empty( $stats['bytes'] ) || $stats['bytes'] < 0 ) {
415
  $stats['bytes'] = 0;
416
  }
426
 
427
  $smushed_stats = array_merge( $smushed_stats, $stats );
428
 
429
+ //Gotta remove the stats for re-smush ids
430
+ if ( is_array( $wpsmushnextgenadmin->resmush_ids ) && ! empty( $wpsmushnextgenadmin->resmush_ids ) ) {
431
+ $resmush_stats = $this->get_stats_for_ids( $wpsmushnextgenadmin->resmush_ids );
432
+ //Recalculate stats, Remove stats for resmush ids
433
+ $smushed_stats = $this->recalculate_stats( 'sub', $smushed_stats, $resmush_stats );
434
+ }
435
+
436
  return $smushed_stats;
437
  }
438
 
445
 
446
  /**
447
  * Returns the Stats for a image formatted into a nice table
448
+ *
449
  * @param $image_id
450
  * @param $wp_smush_data
451
  * @param $attachment_metadata
477
  if ( ! empty( $skipped ) ) {
478
  foreach ( $skipped as $img_data ) {
479
  $skip_class = $img_data['reason'] == 'size_limit' ? ' error' : '';
480
+ $stats .= '<tr>
481
  <td>' . strtoupper( $img_data['size'] ) . '</td>
482
  <td class="smush-skipped' . $skip_class . '">' . $WpSmush->skip_reason( $img_data['reason'] ) . '</td>
483
  </tr>';
500
  $stats .= " ( $size_value->percent% )";
501
  }
502
 
503
+ $stats .= '</td>
504
  </tr>';
505
  }
506
  $stats .= '</tbody>
577
 
578
  /**
579
  * Check if image can be resmushed
580
+ *
581
  * @param $status_txt
582
  *
583
  * @return string
601
  return $show_resmush;
602
  }
603
 
604
+ /**
605
+ * Get the combined stats for given Ids
606
+ *
607
+ * @param $ids
608
+ *
609
+ * @return array Array of Stats for the given ids
610
+ *
611
+ */
612
+ function get_stats_for_ids( $ids = array() ) {
613
+ //Return if we don't have an array or no ids
614
+ if ( ! is_array( $ids ) || empty( $ids ) ) {
615
+ return false;
616
+ }
617
+
618
+ //Initialize the Stats array
619
+ $stats = array(
620
+ 'size_before' => 0,
621
+ 'size_after' => 0
622
+ );
623
+ //Calculate the stats, Expensive Operation
624
+ foreach ( $ids as $id ) {
625
+ $image_stats = $this->get_attachment_stats( $id );
626
+ //Add the stats to $stats
627
+ foreach ( $stats as $k => $value ) {
628
+ if ( empty( $image_stats['stats'] ) || empty( $image_stats['stats'][ $k ] ) ) {
629
+ continue;
630
+ }
631
+ $stats[ $k ] += $image_stats['stats'][ $k ];
632
+ }
633
+ }
634
+
635
+ //Calculate savings
636
+ if ( ! empty( $stats['size_before'] ) && ! empty( $stats['size_after'] ) ) {
637
+ $stats['bytes'] = $stats['size_before'] - $stats['size_after'];
638
+ }
639
+
640
+ return $stats;
641
+ }
642
+
643
+ /**
644
+ * Add/Subtract the values from 2nd array to First array
645
+ * This function is very specific to current requirement of stats re-calculation
646
+ *
647
+ * @param string $op 'add', 'sub' Add or Subtract the values
648
+ * @param array $a1
649
+ * @param array $a2
650
+ *
651
+ * @return array Return $a1
652
+ */
653
+ function recalculate_stats( $op = 'add', $a1 = array(), $a2 = array() ) {
654
+ //If the first array itself is not set, return
655
+ if ( empty( $a1 ) ) {
656
+ return $a1;
657
+ }
658
+
659
+ //Iterate over keys in first array, and add/subtract the values
660
+ foreach ( $a1 as $k => $v ) {
661
+ //If the key is not set in 2nd array, skip
662
+ if ( empty( $a2[ $k ] ) ) {
663
+ continue;
664
+ }
665
+ //Else perform the operation, Considers the value to be integer, doesn't performs a check
666
+ if ( 'sub' == $op ) {
667
+ //Subtract the value
668
+ $a1[ $k ] -= $a2[ $k ];
669
+ } elseif ( 'add' == $op ) {
670
+ //add the value
671
+ $a1[ $k ] += $a2[ $k ];
672
+ }
673
+ }
674
+
675
+ //Recalculate percentage and human savings
676
+ $a1['percent'] = !empty( $a1['size_before'] ) ? ( ( $a1['bytes'] / $a1['size_before'] ) * 100 ) : 0;
677
+ $a1['human'] = !empty( $a1['bytes'] ) ? size_format( $a1['bytes'], 1 ) : 0;
678
+
679
+ return $a1;
680
+ }
681
+
682
+ /**
683
+ * Get Super smushed images from the given images array
684
+ *
685
+ * @param array $images Array of images containing metadata
686
+ *
687
+ * @return array Array containing ids of supersmushed images
688
+ */
689
+ function get_super_smushed_images( $images = array() ) {
690
+ if ( empty( $images ) ) {
691
+ return array();
692
+ }
693
+ $super_smushed = array();
694
+ //Iterate Over all the images
695
+ foreach ( $images as $image_k => $image ) {
696
+ if ( empty( $image ) || ! is_array( $image ) || ! isset( $image['wp_smush'] ) ) {
697
+ continue;
698
+ }
699
+ //Check for lossy compression
700
+ if ( ! empty( $image['wp_smush']['stats'] ) && ! empty( $image['wp_smush']['stats']['lossy'] ) ) {
701
+ $super_smushed[] = $image_k;
702
+ }
703
+
704
+ }
705
+ return $super_smushed;
706
+ }
707
+
708
+ /**
709
+ * Recalculate stats for the given smushed ids and update the cache
710
+ * Update Super smushed image ids
711
+ *
712
+ */
713
+ function update_stats_cache() {
714
+
715
+ global $wpsmushnextgenadmin;
716
+ //Get the Image ids
717
+ $smushed_images = $this->get_ngg_images( 'smushed' );
718
+ $super_smushed = array(
719
+ 'ids' => array(),
720
+ 'timestamp' => ''
721
+ );
722
+
723
+ $stats = $this->get_stats_for_ids( $smushed_images );
724
+ $lossy = $this->get_super_smushed_images( $smushed_images );
725
+
726
+ if ( empty( $stats['bytes'] ) && ! empty( $stats['size_before'] ) ) {
727
+ $stats['bytes'] = $stats['size_before'] - $stats['size_after'];
728
+ }
729
+ $stats['human'] = size_format( $stats['bytes'] );
730
+ if ( ! empty( $stats['size_before'] ) ) {
731
+ $stats['percent'] = ( $stats['bytes'] / $stats['size_before'] ) * 100;
732
+ $stats['percent'] = round( $stats['percent'], 2 );
733
+ }
734
+
735
+ $super_smushed['ids'] = $lossy;
736
+ $super_smushed['timestamp'] = current_time( 'timestamp' );
737
+
738
+ //Update Re-smush list
739
+ if ( is_array( $wpsmushnextgenadmin->resmush_ids ) && is_array( $smushed_images ) ) {
740
+ $resmush_ids = array_intersect( $wpsmushnextgenadmin->resmush_ids, array_keys( $smushed_images ) );
741
+ }
742
+
743
+ //If we have resmush ids, add it to db
744
+ if( !empty( $resmush_ids ) ) {
745
+ //Update re-smush images to db
746
+ update_option( 'wp-smush-nextgen-resmush-list', $resmush_ids, false );
747
+ }
748
+
749
+ //Update Super smushed images in db
750
+ update_option( 'wp-smush-super_smushed_nextgen', $super_smushed, false );
751
+
752
+ //Update Stats Cache
753
+ update_option( 'wp_smush_stats_nextgen', $stats, false );
754
+
755
+ }
756
+
757
  }//End of Class
758
 
759
  }//End Of if class not exists
lib/wp-async-task.php DELETED
@@ -1,275 +0,0 @@
1
- <?php
2
- /**
3
- * WP Asynchronous Tasks
4
- * Version: 1.0
5
- * Description: Creates an abstract class to execute asynchronous tasks
6
- * Author: 10up, Eric Mann, Luke Gedeon, John P. Bloch
7
- * License: MIT
8
- * Note: Modified to return metadata at the end of the launch function
9
- */
10
-
11
- if ( ! class_exists( 'WP_Async_Task' ) ) {
12
- abstract class WP_Async_Task {
13
-
14
- /**
15
- * Constant identifier for a task that should be available to logged-in users
16
- *
17
- * See constructor documentation for more details.
18
- */
19
- const LOGGED_IN = 1;
20
-
21
- /**
22
- * Constant identifier for a task that should be available to logged-out users
23
- *
24
- * See constructor documentation for more details.
25
- */
26
- const LOGGED_OUT = 2;
27
-
28
- /**
29
- * Constant identifier for a task that should be available to all users regardless of auth status
30
- *
31
- * See constructor documentation for more details.
32
- */
33
- const BOTH = 3;
34
-
35
- /**
36
- * This is the argument count for the main action set in the constructor. It
37
- * is set to an arbitrarily high value of twenty, but can be overridden if
38
- * necessary
39
- *
40
- * @var int
41
- */
42
- protected $argument_count = 20;
43
-
44
- /**
45
- * Priority to fire intermediate action.
46
- *
47
- * @var int
48
- */
49
- protected $priority = 10;
50
-
51
- /**
52
- * @var string
53
- */
54
- protected $action;
55
-
56
- /**
57
- * @var array
58
- */
59
- protected $_body_data;
60
-
61
- /**
62
- * Constructor to wire up the necessary actions
63
- *
64
- * Which hooks the asynchronous postback happens on can be set by the
65
- * $auth_level parameter. There are essentially three options: logged in users
66
- * only, logged out users only, or both. Set this when you instantiate an
67
- * object by using one of the three class constants to do so:
68
- * - LOGGED_IN
69
- * - LOGGED_OUT
70
- * - BOTH
71
- * $auth_level defaults to BOTH
72
- *
73
- * @throws Exception If the class' $action value hasn't been set
74
- *
75
- * @param int $auth_level The authentication level to use (see above)
76
- */
77
- public function __construct( $auth_level = self::BOTH ) {
78
- if ( empty( $this->action ) ) {
79
- throw new Exception( 'Action not defined for class ' . __CLASS__ );
80
- }
81
- //Handle the actual action
82
- add_action( $this->action, array( $this, 'launch' ), (int) $this->priority, (int) $this->argument_count );
83
-
84
- add_action( "admin_post_wp_async_$this->action", array( $this, 'handle_postback' ) );
85
- }
86
-
87
- /**
88
- * Add the shutdown action for launching the real postback if we don't
89
- * get an exception thrown by prepare_data().
90
- *
91
- * @uses func_get_args() To grab any arguments passed by the action
92
- */
93
- public function launch() {
94
- $data = func_get_args();
95
- try {
96
- $data = $this->prepare_data( $data );
97
- } catch ( Exception $e ) {
98
- return;
99
- }
100
-
101
- $data['action'] = "wp_async_$this->action";
102
- $data['_nonce'] = $this->create_async_nonce();
103
-
104
- $this->_body_data = $data;
105
-
106
- if ( ! has_action( 'shutdown', array( $this, 'launch_on_shutdown' ) ) ) {
107
- add_action( 'shutdown', array( $this, 'launch_on_shutdown' ) );
108
- }
109
-
110
- //If we have image metadata return it
111
- if ( ! empty( $data['metadata'] ) ) {
112
- return $data['metadata'];
113
- }
114
- }
115
-
116
- /**
117
- * Launch the request on the WordPress shutdown hook
118
- *
119
- * On VIP we got into data races due to the postback sometimes completing
120
- * faster than the data could propogate to the database server cluster.
121
- * This made WordPress get empty data sets from the database without
122
- * failing. On their advice, we're moving the actual firing of the async
123
- * postback to the shutdown hook. Supposedly that will ensure that the
124
- * data at least has time to get into the object cache.
125
- *
126
- * @uses $_COOKIE To send a cookie header for async postback
127
- * @uses apply_filters()
128
- * @uses admin_url()
129
- * @uses wp_remote_post()
130
- */
131
- public function launch_on_shutdown() {
132
- if ( ! empty( $this->_body_data ) ) {
133
- $cookies = array();
134
- foreach ( $_COOKIE as $name => $value ) {
135
- $cookies[] = "$name=" . urlencode( is_array( $value ) ? serialize( $value ) : $value );
136
- }
137
-
138
- //@todo: We've set sslverify to false
139
- $request_args = array(
140
- 'timeout' => 10,
141
- 'blocking' => false,
142
- 'sslverify' => false,
143
- 'body' => $this->_body_data,
144
- 'headers' => array(
145
- 'cookie' => implode( '; ', $cookies ),
146
- ),
147
- );
148
-
149
- $url = admin_url( 'admin-post.php' );
150
-
151
- wp_remote_post( $url, $request_args );
152
- }
153
- }
154
-
155
- /**
156
- * Verify the postback is valid, then fire any scheduled events.
157
- *
158
- * @uses $_POST['_nonce']
159
- * @uses is_user_logged_in()
160
- * @uses add_filter()
161
- * @uses wp_die()
162
- */
163
- public function handle_postback() {
164
- if ( isset( $_POST['_nonce'] ) && $this->verify_async_nonce( $_POST['_nonce'] ) ) {
165
- $this->run_action();
166
- }
167
-
168
- add_filter( 'wp_die_handler', array( $this, 'handle_die' ) );
169
- wp_die();
170
- }
171
-
172
- /**
173
- * Handle Die
174
- */
175
- function handle_die() {
176
- die();
177
- }
178
-
179
- /**
180
- * Create a random, one time use token.
181
- *
182
- * Based entirely on wp_create_nonce() but does not tie the nonce to the
183
- * current logged-in user.
184
- *
185
- * @uses wp_nonce_tick()
186
- * @uses wp_hash()
187
- *
188
- * @return string The one-time use token
189
- */
190
- protected function create_async_nonce() {
191
- $action = $this->get_nonce_action();
192
- $i = wp_nonce_tick();
193
-
194
- return substr( wp_hash( $i . $action . get_class( $this ), 'nonce' ), - 12, 10 );
195
- }
196
-
197
- /**
198
- * Verify that the correct nonce was used within the time limit.
199
- *
200
- * @uses wp_nonce_tick()
201
- * @uses wp_hash()
202
- *
203
- * @param string $nonce Nonce to be verified
204
- *
205
- * @return bool Whether the nonce check passed or failed
206
- */
207
- protected function verify_async_nonce( $nonce ) {
208
- $action = $this->get_nonce_action();
209
- $i = wp_nonce_tick();
210
-
211
- // Nonce generated 0-12 hours ago
212
- if ( substr( wp_hash( $i . $action . get_class( $this ), 'nonce' ), - 12, 10 ) == $nonce ) {
213
- return 1;
214
- }
215
-
216
- // Nonce generated 12-24 hours ago
217
- if ( substr( wp_hash( ( $i - 1 ) . $action . get_class( $this ), 'nonce' ), - 12, 10 ) == $nonce ) {
218
- return 2;
219
- }
220
-
221
- // Invalid nonce
222
- return false;
223
- }
224
-
225
- /**
226
- * Get a nonce action based on the $action property of the class
227
- *
228
- * @return string The nonce action for the current instance
229
- */
230
- protected function get_nonce_action() {
231
- $action = $this->action;
232
- if ( substr( $action, 0, 7 ) === 'nopriv_' ) {
233
- $action = substr( $action, 7 );
234
- }
235
- $action = "wp_async_$action";
236
-
237
- return $action;
238
- }
239
-
240
- /**
241
- * Prepare any data to be passed to the asynchronous postback
242
- *
243
- * The array this function receives will be a numerically keyed array from
244
- * func_get_args(). It is expected that you will return an associative array
245
- * so that the $_POST values used in the asynchronous call will make sense.
246
- *
247
- * The array you send back may or may not have anything to do with the data
248
- * passed into this method. It all depends on the implementation details and
249
- * what data is needed in the asynchronous postback.
250
- *
251
- * Do not set values for 'action' or '_nonce', as those will get overwritten
252
- * later in launch().
253
- *
254
- * @throws Exception If the postback should not occur for any reason
255
- *
256
- * @param array $data The raw data received by the launch method
257
- *
258
- * @return array The prepared data
259
- */
260
- abstract protected function prepare_data( $data );
261
-
262
- /**
263
- * Run the do_action function for the asynchronous postback.
264
- *
265
- * This method needs to fetch and sanitize any and all data from the $_POST
266
- * superglobal and provide them to the do_action call.
267
- *
268
- * The action should be constructed as "wp_async_task_$this->action"
269
- */
270
- abstract protected function run_action();
271
-
272
- }
273
-
274
- }
275
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -1,13 +1,13 @@
1
  === Smush Image Compression and Optimization ===
2
  Plugin Name: Smush Image Compression and Optimization
3
- Version: 2.7.8.1
4
  Author: WPMU DEV
5
  Author URI: https://premium.wpmudev.org/
6
  Contributors: WPMUDEV, alexdunae
7
  Tags: image, resize, optimize, optimise, compress, performance, optimisation, optimise JPG, photo, pictures, optimizer, Smush WordPress Compression, Smush.it
8
  Requires at least: 4.6
9
  Tested up to: 4.9.6
10
- Stable tag: 2.7.8.1
11
  Requires PHP: 5.2.4
12
  License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
13
 
@@ -164,9 +164,35 @@ Yahoo's Smush.it API is gone forever. So WPMU DEV built our own free API that is
164
 
165
  == Changelog ==
166
 
167
- = 2.7.8.1 =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
 
169
- * Added Privacy Policy content for Smush in Privacy Policy Guide
170
 
171
  = 2.7.8 =
172
 
1
  === Smush Image Compression and Optimization ===
2
  Plugin Name: Smush Image Compression and Optimization
3
+ Version: 2.7.9.1
4
  Author: WPMU DEV
5
  Author URI: https://premium.wpmudev.org/
6
  Contributors: WPMUDEV, alexdunae
7
  Tags: image, resize, optimize, optimise, compress, performance, optimisation, optimise JPG, photo, pictures, optimizer, Smush WordPress Compression, Smush.it
8
  Requires at least: 4.6
9
  Tested up to: 4.9.6
10
+ Stable tag: 2.7.9.1
11
  Requires PHP: 5.2.4
12
  License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
13
 
164
 
165
  == Changelog ==
166
 
167
+ = 2.7.9.1 =
168
+
169
+ * Fixed: Conflict with front-end editors
170
+
171
+ = 2.7.9 =
172
+
173
+ * Update:
174
+ * Smush settings moved to separate top level page in dashboard ( Smush/Smush Pro )
175
+ * Added Privacy Policy content for Smush in Privacy Policy Guide
176
+
177
+ * Fixed:
178
+ * Conflict with plugin Download Manager, Embed any document, Getty
179
+ * Settings link incorrect for sub sites
180
+ * Don't load smush settings in front-end
181
+ * Increase php memory limit only if lesser than required
182
+ * Display a warning if custom table isn't created
183
+ * Attachment details not being displayed when uploading image in post edit screen
184
+ * Compatibility with WP Offload S3 latest version
185
+ * Directory Smush skips 1 image for every iteration of 50 images ( Free version )
186
+ * Nextgen Gallery Stats not updated properly ( Pro Version )
187
+ * Added instructions for Resize Image feature - It works independent of Auto Smush, If "Automatic Smush" is off and
188
+ "Resize my full size image" is kept on, the image would be resized
189
+ * Smush button doesn not appears in Media Modal window for Ultimate Branding
190
+ * NextGen Integration: Smush stats not updated after image deletion
191
+ * Warning/Error for settings on initial setup
192
+
193
+ * Integrations:
194
+ * Updated WP Offload S3 integration to smush images with Cloudfront enabled
195
 
 
196
 
197
  = 2.7.8 =
198
 
uninstall.php CHANGED
@@ -47,7 +47,12 @@ $smushit_keys = array(
47
  'networkwide',
48
  'dir_path',
49
  'scan',
50
- 'last_settings'
 
 
 
 
 
51
  );
52
 
53
  //Cache Keys
47
  'networkwide',
48
  'dir_path',
49
  'scan',
50
+ 'last_settings',
51
+ 's3',
52
+ 'smush_option',
53
+ 'smush-directory-path-hash-updated',
54
+ 'smush_global_stats',
55
+ 'skip-smush-setup'
56
  );
57
 
58
  //Cache Keys
wp-smush.php CHANGED
@@ -1,10 +1,10 @@
1
  <?php
2
  /*
3
- Plugin Name: WP Smush
4
  Plugin URI: http://wordpress.org/extend/plugins/wp-smushit/
5
  Description: Reduce image file sizes, improve performance and boost your SEO using the free <a href="https://premium.wpmudev.org/">WPMU DEV</a> WordPress Smush API.
6
  Author: WPMU DEV
7
- Version: 2.7.8.1
8
  Author URI: https://premium.wpmudev.org/
9
  Text Domain: wp-smushit
10
  */
@@ -35,7 +35,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
35
  * Constants
36
  */
37
  $prefix = 'WP_SMUSH_';
38
- $version = '2.7.8.1';
39
 
40
  //Deactivate the .org version, if pro version is active
41
  add_action( 'admin_init', 'deactivate_smush_org' );
@@ -53,7 +53,7 @@ if ( ! function_exists( 'deactivate_smush_org' ) ) {
53
  /**
54
  * Set the default timeout for API request and AJAX timeout
55
  */
56
- $timeout = apply_filters( 'WP_SMUSH_API_TIMEOUT', 90 );
57
 
58
  // To support smushing on staging sites like SiteGround staging where
59
  // staging site urls are different but redirects to main site url.
@@ -130,7 +130,7 @@ if ( ! function_exists( 'wp_smush_rating_message' ) ) {
130
  */
131
  if ( ! function_exists( 'wp_smush_email_message' ) ) {
132
  function wp_smush_email_message( $message ) {
133
- $message = "You're awesome for installing %s! Site speed isn't all image optimization though, so we've collected all the best speed resources we know in a single email - just for users of WP Smush!";
134
 
135
  return $message;
136
  }
@@ -194,7 +194,8 @@ if ( is_admin() ) {
194
  'name' => 'WP Smush Pro',
195
  'screens' => array(
196
  'upload',
197
- 'media_page_wp-smush-bulk'
 
198
  )
199
  );
200
  }
@@ -206,9 +207,10 @@ add_action( 'admin_notices', 'smush_deactivated' );
206
  //Display a admin Notice about plugin deactivation
207
  if ( ! function_exists( 'smush_deactivated' ) ) {
208
  function smush_deactivated() {
209
- if ( get_site_option( 'smush_deactivated' ) && is_super_admin() ) { ?>
 
210
  <div class="updated">
211
- <p><?php esc_html_e( 'WP Smush Free was deactivated. You have WP Smush Pro active!', 'wp-smushit' ); ?></p>
212
  </div> <?php
213
  delete_site_option( 'smush_deactivated' );
214
  }
@@ -296,4 +298,25 @@ if ( ! function_exists( 'smush_i18n' ) ) {
296
  }
297
  }
298
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
  register_activation_hook( __FILE__, 'smush_activated' );
1
  <?php
2
  /*
3
+ Plugin Name: Smush
4
  Plugin URI: http://wordpress.org/extend/plugins/wp-smushit/
5
  Description: Reduce image file sizes, improve performance and boost your SEO using the free <a href="https://premium.wpmudev.org/">WPMU DEV</a> WordPress Smush API.
6
  Author: WPMU DEV
7
+ Version: 2.7.9.1
8
  Author URI: https://premium.wpmudev.org/
9
  Text Domain: wp-smushit
10
  */
35
  * Constants
36
  */
37
  $prefix = 'WP_SMUSH_';
38
+ $version = '2.7.9.1';
39
 
40
  //Deactivate the .org version, if pro version is active
41
  add_action( 'admin_init', 'deactivate_smush_org' );
53
  /**
54
  * Set the default timeout for API request and AJAX timeout
55
  */
56
+ $timeout = apply_filters( 'WP_SMUSH_API_TIMEOUT', 150 );
57
 
58
  // To support smushing on staging sites like SiteGround staging where
59
  // staging site urls are different but redirects to main site url.
130
  */
131
  if ( ! function_exists( 'wp_smush_email_message' ) ) {
132
  function wp_smush_email_message( $message ) {
133
+ $message = "You're awesome for installing %s! Site speed isn't all image optimization though, so we've collected all the best speed resources we know in a single email - just for users of Smush!";
134
 
135
  return $message;
136
  }
194
  'name' => 'WP Smush Pro',
195
  'screens' => array(
196
  'upload',
197
+ 'toplevel_page_smush',
198
+ 'toplevel_page_smush-network'
199
  )
200
  );
201
  }
207
  //Display a admin Notice about plugin deactivation
208
  if ( ! function_exists( 'smush_deactivated' ) ) {
209
  function smush_deactivated() {
210
+ //Display only in backend for administrators
211
+ if ( is_admin() && is_super_admin() && get_site_option( 'smush_deactivated' ) ) { ?>
212
  <div class="updated">
213
+ <p><?php esc_html_e( 'Smush Free was deactivated. You have Smush Pro active!', 'wp-smushit' ); ?></p>
214
  </div> <?php
215
  delete_site_option( 'smush_deactivated' );
216
  }
298
  }
299
  }
300
 
301
+ //Add Share UI Class
302
+ add_filter( 'admin_body_class', 'smush_body_classes' );
303
+
304
+ if ( ! function_exists( 'smush_body_classes' ) ) {
305
+ function smush_body_classes( $classes ) {
306
+ //Exit if function doesn't exists
307
+ if ( ! function_exists( 'get_current_screen' ) ) {
308
+ return $classes;
309
+ }
310
+ $current_screen = get_current_screen();
311
+ //If not on plugin page
312
+ if ( 'toplevel_page_smush' != $current_screen->id && 'toplevel_page_smush-network' != $current_screen->id ) {
313
+ return $classes;
314
+ }
315
+ $classes .= 'sui-2-1-0';
316
+
317
+ return $classes;
318
+
319
+ }
320
+ }
321
+
322
  register_activation_hook( __FILE__, 'smush_activated' );