Plugin Directory

Changeset 2124102


Ignore:
Timestamp:
07/16/2019 05:23:13 PM (7 years ago)
Author:
wfryan
Message:

7.3.5 - July 16, 2019

  • Improvement: Improved tagging of the login endpoint for brute force protection.
  • Improvement: Added additional information about reCAPTCHA to its setting control.
  • Improvement: Added a constant that may be overridden to customize the expiration time of login verification email links.
  • Improvement: reCAPTCHA keys are now tested on saving to prevent accidentally inputting a v2 key.
  • Improvement: Added a setting to control the reCAPTCHA human/bot threshold.
  • Improvement: Added a separate option to trigger removal of Login Security tables and data on deactivation.
  • Improvement: Reworked the reCAPTCHA implementation to trigger the token check on login/registration form submission to avoid the token expiring.
  • Fix: Widened the reCAPTCHA key fields to allow the full keys to be visible.
  • Fix: Fixed encoding of the ellipsis character when reporting malware finds.
  • Fix: Disabling the IP blacklist once again correctly clears the block cache.
  • Fix: Addressed an issue when outbound UDP connections are blocked where the NTP check could log an error.
  • Fix: Added handling for reCAPTCHA's JavaScript failing to load, which previously blocked logging in.
  • Fix: Fixed the functionality of the button to send 2FA grace period notifications.
  • Fix: Fixed a missing icon for some help links when running in standalone mode.
Location:
wordfence
Files:
118 added
112 deleted
40 edited
1 copied

Legend:

Unmodified
Added
Removed
  • wordfence/tags/7.3.5/images/wf-horizontal.svg

    r1928218 r2124102  
    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE svg  PUBLIC '-//W3C//DTD SVG 1.1//EN'  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
    3 <svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.4142" version="1.1" viewBox="0 0 2230 399" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero"><path d="m764.54 369.3l4.3-1.8c1.4 3.8 3.3 6.6 5.5 8.4 2.3 1.8 5 2.7 8.3 2.7 3.4 0 6.1-0.9 8.1-2.8 2.1-1.9 3.1-4.4 3.1-7.5 0-2.5-0.7-4.5-2-6.1s-3.6-3.1-6.8-4.4c-1.8-0.7-4.1-1.5-7-2.5s-4.8-1.7-5.6-2.2c-2.6-1.5-4.4-3.1-5.5-4.8s-1.6-3.8-1.6-6.2c0-4.4 1.4-7.9 4.1-10.5 2.7-2.5 6.5-3.8 11.2-3.8 4.2 0 7.7 1 10.5 3.1 2.7 2.1 4.8 5.3 6.3 9.6l-4.2 1.3c-1.3-3.3-3-5.8-5.1-7.4s-4.6-2.4-7.7-2.4c-3 0-5.4 0.9-7.2 2.6s-2.8 3.9-2.8 6.7c0 2.1 0.6 3.8 1.8 5.2s3 2.6 5.5 3.5c1 0.4 2.4 0.9 4.2 1.5 5.2 1.8 8.6 3.2 10.1 4.2 2.4 1.6 4.2 3.3 5.3 5.2s1.6 4.1 1.6 6.7c0 4.7-1.5 8.4-4.4 11.2-3 2.8-6.9 4.1-12 4.1-4.5 0-8.2-1.1-11.2-3.3-2.7-2.2-5.1-5.6-6.8-10.3z" fill="#2d2d2d"/><path d="m839.04 370.9l3.4 1.8c-1.7 3.5-3.7 6-6 7.6s-5.1 2.4-8.5 2.4c-4.8 0-8.6-1.8-11.5-5.3-2.8-3.6-4.3-8.3-4.3-14.4 0-6.2 1.4-11.2 4.2-14.9s6.6-5.5 11.4-5.5c4.7 0 8.3 1.6 10.7 4.8 2.5 3.2 3.7 7.8 3.7 13.9v1.2h-25.5c0 5.3 1 9.3 3 12.1s4.8 4.2 8.5 4.2c2.4 0 4.5-0.6 6.2-1.9 1.8-1 3.3-3.1 4.7-6zm-1.1-11.6c-0.1-4.1-1-7.2-2.8-9.5-1.8-2.2-4.2-3.4-7.3-3.4s-5.6 1.1-7.6 3.4-3.1 5.4-3.5 9.5h21.2z" fill="#2d2d2d"/><path d="m880.74 370.9l3.5 1.9c-1.7 3.5-3.6 6-5.8 7.5-2.2 1.6-4.8 2.3-8 2.3-4.8 0-8.7-1.8-11.5-5.3s-4.2-8.3-4.2-14.4c0-6.2 1.4-11.2 4.2-14.9s6.5-5.5 11.1-5.5c3.3 0 6.2 0.9 8.5 2.6s4.1 4.3 5.5 7.8l-4 1.6c-1-2.8-2.4-4.8-4-6.1s-3.6-2-5.9-2c-3.4 0-6 1.4-7.9 4.3-1.9 2.8-2.8 6.8-2.8 11.9 0 5.3 1 9.3 2.9 12.2 1.9 2.8 4.7 4.3 8.2 4.3 2.3 0 4.3-0.6 5.9-1.9 1.4-1.3 2.9-3.4 4.3-6.3z" fill="#2d2d2d"/><path d="m927.84 343.4v38.6h-4.6v-6.1c-2.3 2.2-4.5 3.9-6.7 5s-4.4 1.7-6.6 1.7c-3.5 0-6.1-1-7.8-3.1s-2.6-5.2-2.6-9.3v-26.9h4.6v25.3c0 3.8 0.5 6.4 1.6 7.9 1.1 1.4 2.9 2.2 5.6 2.2 1.9 0 3.9-0.6 5.9-1.8s4.1-3 6.1-5.4v-28.1h4.5z" fill="#2d2d2d"/><path d="m947.64 382.1v-38.6h4.6v6.7h0.4c1.3-2.6 2.9-4.4 4.6-5.6 1.8-1.2 3.9-1.8 6.4-1.8h0.2v4.4h-0.6c-2.7 0-5 0.9-6.8 2.5-1.8 1.7-3.2 4.3-4.3 7.9v24.5h-4.5z" fill="#2d2d2d"/><path d="m977.64 335.3v-6.5h5.5v6.5h-5.5zm0.5 46.8v-38.6h4.6v38.6h-4.6z" fill="#2d2d2d"/><path d="m1002.8 382.1v-38.6h4.6v6.1c2.3-2.2 4.5-3.9 6.7-5.1 2.2-1.1 4.4-1.7 6.6-1.7 3.5 0 6.1 1 7.8 3.1s2.6 5.2 2.6 9.3v26.9h-4.6v-25.2c0-3.9-0.5-6.5-1.6-7.9s-2.9-2.1-5.6-2.1c-1.9 0-3.9 0.6-5.9 1.8s-4 3-6.1 5.4v28.1h-4.5v-0.1z" fill="#2d2d2d"/><path d="m1052.8 366.9v-0.4c-1.6-1.4-2.7-3-3.5-4.7s-1.1-3.6-1.1-5.7c0-3.9 1.3-7.1 3.9-9.7s5.9-3.9 9.9-3.9c1.8 0 3.5 0.3 5 0.7 1.5 0.5 2.9 1.2 4.3 2.2 1.2-1.2 2.4-2 3.7-2.6s2.6-0.9 4.1-0.9v4.3h-0.9c-1 0-1.9 0.1-2.7 0.3s-1.5 0.6-2.1 1.1c0.8 1.2 1.4 2.5 1.8 3.8s0.6 2.7 0.6 4.2c0 4.2-1.2 7.5-3.7 10.1s-5.7 3.9-9.6 3.9c-0.9 0-1.9-0.1-2.8-0.2-1-0.2-2-0.4-3-0.8-1.4 0.4-2.5 0.8-3.2 1.4-0.8 0.6-1.1 1.3-1.1 2 0 1.7 3.2 2.8 9.5 3.1 2 0.1 3.5 0.2 4.7 0.3 4.2 0.3 7.3 1.3 9.5 2.9 2.2 1.7 3.3 4 3.3 6.9 0 3.5-1.4 6.2-4.3 8.1-2.9 1.8-7.1 2.8-12.5 2.8-5 0-8.9-0.9-11.8-2.6-2.8-1.7-4.2-4-4.2-7.1 0-1.6 0.5-3 1.4-4.2s2.4-2.4 4.3-3.5v-0.8c-1.3-0.4-2.3-1-3-1.8-0.7-0.9-1.1-1.9-1.1-3s0.4-2.2 1.2-3.2c0.6-0.9 1.8-1.9 3.4-3zm4.4 12.3c-2.2 1-3.8 2-4.9 3.2s-1.6 2.5-1.6 3.9c0 2 1 3.6 3.2 4.7 2.1 1.1 5 1.7 8.8 1.7 3.9 0 7-0.6 9.2-1.9s3.3-3 3.3-5.2c0-2.3-1.3-4-3.9-5-2.8-0.9-7.4-1.4-14.1-1.4zm-4.7-23.1c0 2.8 0.9 5.2 2.8 7.2s4.1 3 6.7 3c2.7 0 5-1 6.8-2.9s2.7-4.3 2.7-7.3c0-2.9-0.9-5.3-2.7-7.2s-4-2.8-6.8-2.8c-2.6 0-4.9 1-6.7 2.9-1.9 2-2.8 4.3-2.8 7.1z" fill="#2d2d2d"/><path d="m1131 381.9l-13.4-38.4h4.6l11.4 32.9 11.3-32.9h4.4l-14.5 41.7c-1.4 4-3 6.9-4.9 8.5s-4.4 2.4-7.5 2.4c-0.7 0-1.4 0-2-0.1-0.7 0-1.3-0.1-2-0.2v-3.7c0.5 0.1 1.1 0.2 1.6 0.3 0.5 0 1.1 0.1 1.6 0.1 2.7 0 4.8-0.8 6.2-2.4 1.4-1.8 2.5-4.5 3.2-8.2z" fill="#2d2d2d"/><path d="m1160.3 362.7c0-6.1 1.4-11 4.3-14.5 2.9-3.6 6.7-5.4 11.5-5.4s8.6 1.8 11.5 5.4 4.3 8.4 4.3 14.5-1.4 11-4.3 14.6-6.7 5.4-11.5 5.4-8.6-1.8-11.5-5.4c-2.8-3.6-4.3-8.5-4.3-14.6zm4.6 0c0 5.1 1 9.1 2.9 12 2 2.9 4.7 4.3 8.3 4.3 3.5 0 6.2-1.4 8.2-4.3 2-2.8 2.9-6.8 2.9-12 0-5.1-1-9.1-2.9-11.9-2-2.8-4.7-4.2-8.2-4.2s-6.3 1.4-8.3 4.3c-1.9 2.7-2.9 6.7-2.9 11.8z" fill="#2d2d2d"/><path d="m1236.2 343.4v38.6h-4.6v-6.1c-2.3 2.2-4.5 3.9-6.7 5s-4.4 1.7-6.6 1.7c-3.5 0-6.1-1-7.8-3.1-1.8-2.1-2.6-5.2-2.6-9.3v-26.9h4.6v25.3c0 3.8 0.5 6.4 1.6 7.9 1.1 1.4 2.9 2.2 5.5 2.2 1.9 0 3.9-0.6 6-1.8 2-1.2 4.1-3 6.1-5.4v-28.1h4.5z" fill="#2d2d2d"/><path d="m1256 382.1v-38.6h4.6v6.7h0.4c1.3-2.6 2.9-4.4 4.6-5.6 1.8-1.2 3.9-1.8 6.4-1.8h0.2v4.4h-0.6c-2.7 0-5 0.9-6.8 2.5-1.8 1.7-3.2 4.3-4.3 7.9v24.5h-4.5z" fill="#2d2d2d"/><path d="m1324.1 382.1l-13.8-53.7h9.9l7.7 30.9c0.3 1.2 0.6 2.8 1 4.9s0.8 4.4 1.1 7.1c0.2-2.7 0.8-6.1 1.8-10.2 0.2-0.7 0.3-1.2 0.4-1.5l7.8-31.2h8.7l7.4 30.9c0.3 1.2 0.6 2.8 1 4.9s0.8 4.5 1.2 7.2c0.1-1.7 0.4-3.6 0.7-5.5s0.8-4 1.3-6.2l7.8-31.2h9.9l-13.8 53.7h-11.2l-6.7-26.9c-0.6-2.5-1.1-4.7-1.4-6.6-0.4-1.9-0.6-3.7-0.8-5.4-0.3 2.5-0.7 4.7-1 6.7-0.4 2-0.7 3.7-1 5.1l-6.9 27h-11.1z" fill="#00719e"/><path d="m1385.4 362.7c0-6.3 1.5-11.2 4.4-14.8s7-5.3 12.2-5.3 9.3 1.8 12.2 5.3 4.4 8.5 4.4 14.8-1.5 11.2-4.4 14.8c-2.9 3.5-7 5.3-12.2 5.3s-9.2-1.8-12.2-5.4c-2.9-3.5-4.4-8.4-4.4-14.7zm9.3 0c0 4.1 0.6 7.2 1.8 9.2s3 3 5.5 3 4.3-1 5.5-3 1.8-5.1 1.8-9.2-0.6-7.2-1.8-9.2-3-3-5.5-3c-2.4 0-4.3 1-5.5 3-1.2 2.1-1.8 5.1-1.8 9.2z" fill="#00719e"/><path d="m1432.9 382.1v-38.7h8.7v6.4c1.3-2.3 2.7-4.1 4.3-5.3s3.4-1.8 5.3-1.8h0.7c0.2 0 0.3 0.1 0.4 0.1v9.5h-0.4c-2.1 0-3.9 0.5-5.6 1.6-1.7 1-3.1 2.5-4.2 4.5v23.7h-9.2z" fill="#00719e"/><path d="m1488.7 377.9c-1.4 1.7-2.9 2.9-4.6 3.7s-3.6 1.2-5.8 1.2c-4.4 0-8.1-1.9-10.9-5.6s-4.2-8.6-4.2-14.5c0-6 1.4-10.8 4.1-14.5s6.3-5.6 10.7-5.6c1.9 0 3.7 0.4 5.2 1 1.5 0.7 2.9 1.8 4.3 3.4v-18.7h8.9v44.7c0 0.9 0 2.2 0.1 3.7s0.2 3.3 0.3 5.3h-7.1l-1-4.1zm-1.3-6.1v-18.4c-1.3-1.2-2.5-2-3.5-2.5-1.1-0.5-2.2-0.8-3.3-0.8-2.6 0-4.6 1.1-6 3.3s-2.2 5.3-2.2 9.2c0 4 0.7 7 2.2 9.2 1.4 2.2 3.5 3.2 6.1 3.2 1.2 0 2.3-0.2 3.4-0.8 0.9-0.4 2-1.2 3.3-2.4z" fill="#00719e"/><path d="m1514.6 382.1v-53.7h19.2c6.3 0 11 1.3 14.1 4 3.1 2.6 4.6 6.6 4.6 12 0 5.2-1.5 9.2-4.5 12-3 2.7-7.5 4.1-13.3 4.1h-10v21.7h-10.1v-0.1zm10.2-30.3h7.5c3.7 0 6.3-0.6 7.9-1.7 1.5-1.2 2.3-3.1 2.3-5.8s-0.8-4.7-2.3-5.8c-1.5-1.2-4.1-1.7-7.9-1.7h-7.5v15z" fill="#00719e"/><path d="m1566.4 382.1v-38.7h8.7v6.4c1.3-2.3 2.7-4.1 4.3-5.3s3.4-1.8 5.3-1.8h0.7c0.2 0 0.3 0.1 0.4 0.1v9.5h-0.4c-2.1 0-3.9 0.5-5.6 1.6-1.7 1-3.1 2.5-4.2 4.5v23.7h-9.2z" fill="#00719e"/><path d="m1628.3 374.5c-1.5 2.7-3.5 4.8-6.1 6.2s-5.7 2.1-9.3 2.1c-5.2 0-9.2-1.8-12.1-5.3s-4.3-8.4-4.3-14.8c0-6.3 1.4-11.3 4.3-14.8 2.9-3.6 6.9-5.3 12-5.3s9 1.7 11.8 5.2c2.8 3.4 4.2 8.3 4.2 14.5v2h-23.2c0.1 3.7 0.8 6.4 2.1 8.2 1.4 1.8 3.4 2.8 6.1 2.8 1.7 0 3.1-0.4 4.4-1.2 1.2-0.8 2.4-2.1 3.5-3.8l6.6 4.2zm-22.7-16.8h14.2c0-2.6-0.6-4.6-1.9-6s-3-2.2-5.2-2.2c-2.1 0-3.7 0.7-5 2.1-1.2 1.5-1.9 3.5-2.1 6.1z" fill="#00719e"/><path d="m1639.9 375l6.2-4.9c1.5 1.9 2.9 3.3 4.4 4.2 1.4 0.9 2.9 1.4 4.5 1.4s3-0.4 3.9-1.1c1-0.8 1.4-1.8 1.4-3.1 0-1.9-2-3.7-6.1-5.2-0.4-0.2-0.8-0.3-1-0.4-4.8-1.8-8.1-3.6-9.7-5.3s-2.4-3.9-2.4-6.6c0-3.3 1.2-6 3.7-8.2 2.5-2.1 5.7-3.2 9.6-3.2 2.6 0 5 0.5 7.2 1.4 2.1 1 4.1 2.5 5.9 4.5l-5.8 5c-1.2-1.3-2.5-2.3-3.7-2.9s-2.5-0.9-3.8-0.9c-1.5 0-2.7 0.3-3.6 1s-1.3 1.6-1.3 2.8c0 1.4 2 2.9 6.1 4.4 1.1 0.4 1.9 0.7 2.6 1 4.1 1.6 6.9 3.3 8.4 5 1.5 1.8 2.2 4.1 2.2 7.1 0 3.6-1.2 6.5-3.7 8.6-2.5 2.2-5.7 3.3-9.8 3.3-3.2 0-6-0.6-8.4-1.9-2.5-1.3-4.8-3.2-6.8-6z" fill="#00719e"/><path d="m1679.8 375l6.2-4.9c1.5 1.9 2.9 3.3 4.4 4.2 1.4 0.9 3 1.4 4.5 1.4 1.7 0 3-0.4 3.9-1.1 1-0.8 1.4-1.8 1.4-3.1 0-1.9-2-3.7-6.1-5.2-0.4-0.2-0.8-0.3-1-0.4-4.8-1.8-8.1-3.6-9.7-5.3s-2.4-3.9-2.4-6.6c0-3.3 1.2-6 3.7-8.2 2.5-2.1 5.7-3.2 9.6-3.2 2.6 0 5 0.5 7.2 1.4 2.1 1 4.1 2.5 5.9 4.5l-5.8 5c-1.2-1.3-2.5-2.3-3.7-2.9s-2.5-0.9-3.8-0.9c-1.5 0-2.7 0.3-3.6 1s-1.3 1.6-1.3 2.8c0 1.4 2 2.9 6.1 4.4 1.1 0.4 1.9 0.7 2.6 1 4.1 1.6 6.9 3.3 8.4 5 1.5 1.8 2.2 4.1 2.2 7.1 0 3.6-1.2 6.5-3.7 8.6-2.5 2.2-5.7 3.3-9.8 3.3-3.2 0-6-0.6-8.4-1.9-2.5-1.3-4.8-3.2-6.8-6z" fill="#00719e"/><path d="m1760.3 382.1l-11.3-38.6h4.5l9.3 31.5 9.3-31.5h4.1l9.3 32 9.2-32h4.4l-11.3 38.6h-4.4l-9.2-31-9.4 31h-4.5z" fill="#2d2d2d"/><path d="m1838 370.9l3.4 1.8c-1.7 3.5-3.7 6-6 7.6s-5.2 2.4-8.5 2.4c-4.8 0-8.6-1.8-11.5-5.3-2.8-3.6-4.3-8.3-4.3-14.4 0-6.2 1.4-11.2 4.2-14.9s6.6-5.5 11.3-5.5 8.3 1.6 10.8 4.8 3.7 7.8 3.7 13.9v1.2h-25.5c0 5.3 1 9.3 3 12.1s4.8 4.2 8.5 4.2c2.5 0 4.5-0.6 6.2-1.9 1.8-1 3.3-3.1 4.7-6zm-1.1-11.6c-0.1-4.1-1-7.2-2.8-9.5-1.8-2.2-4.2-3.4-7.3-3.4s-5.6 1.1-7.6 3.4-3.1 5.4-3.5 9.5h21.2z" fill="#2d2d2d"/><path d="m1856.8 382.1c0.1-0.6 0.2-1.3 0.2-2s0.1-1.9 0.1-3.6v-47.7h4.6v19.7h0.4c1.8-1.9 3.6-3.4 5.5-4.3s3.9-1.4 6.1-1.4c4.2 0 7.5 1.8 10 5.4s3.8 8.4 3.8 14.5-1.3 11-3.8 14.6-5.9 5.4-10 5.4c-2.2 0-4.2-0.5-6.1-1.4s-3.7-2.3-5.5-4.3h-0.4l-1.2 5h-3.7v0.1zm4.9-10.4c1.9 2.5 3.8 4.4 5.6 5.5s3.7 1.7 5.7 1.7c3.2 0 5.6-1.4 7.3-4.2s2.6-6.8 2.6-12-0.9-9.2-2.6-12-4.2-4.3-7.3-4.3c-1.9 0-3.8 0.6-5.6 1.8s-3.7 3-5.6 5.5v18h-0.1z" fill="#2d2d2d"/><path d="m1902.5 372.4c1.7 2.2 3.5 3.9 5.5 5 1.9 1.1 4 1.7 6.2 1.7 2.4 0 4.3-0.7 5.8-2s2.2-3 2.2-5.1c0-2.9-2.9-5.5-8.8-7.6-0.5-0.2-0.9-0.3-1.1-0.4-4.8-1.8-8-3.4-9.6-5-1.5-1.5-2.3-3.6-2.3-6 0-3 1.1-5.5 3.4-7.4s5.3-2.9 9-2.9c2.5 0 4.9 0.6 7 1.8 2.2 1.2 4.1 3 5.8 5.3l-3.2 2.4c-1.5-2-3.1-3.5-4.8-4.4s-3.5-1.4-5.7-1.4c-2.1 0-3.7 0.6-5 1.8-1.3 1.1-1.9 2.7-1.9 4.6 0 2.5 2.8 4.8 8.4 6.9 0.8 0.3 1.4 0.5 1.8 0.7 4.6 1.7 7.7 3.4 9.2 5 1.6 1.6 2.3 3.7 2.3 6.3 0 3.3-1.2 5.9-3.6 8s-5.6 3.1-9.5 3.1c-3 0-5.7-0.6-8.1-1.9-2.4-1.2-4.5-3.1-6.5-5.8l3.5-2.7z" fill="#2d2d2d"/><path d="m1942.8 335.3v-6.5h5.6v6.5h-5.6zm0.5 46.8v-38.6h4.6v38.6h-4.6z" fill="#2d2d2d"/><path d="m1973.3 374.8c0 1.5 0.3 2.6 1 3.3s1.7 1.1 3.2 1.1c0.5 0 1 0 1.6-0.1s1.4-0.3 2.5-0.6v3.7c-1 0.3-1.9 0.4-2.7 0.6-0.9 0.1-1.7 0.2-2.5 0.2-2.6 0-4.6-0.7-5.8-2s-1.9-3.4-1.9-6.3v-27.4h-5.7v-3.7h5.7v-11.5h4.6v11.5h8.1v3.7h-8.1v27.5z" fill="#2d2d2d"/><path d="m2019.1 370.9l3.4 1.8c-1.7 3.5-3.7 6-6 7.6s-5.1 2.4-8.5 2.4c-4.8 0-8.6-1.8-11.5-5.3-2.8-3.6-4.3-8.3-4.3-14.4 0-6.2 1.4-11.2 4.2-14.9s6.6-5.5 11.3-5.5 8.3 1.6 10.8 4.8 3.7 7.8 3.7 13.9v1.2h-25.5c0 5.3 1 9.3 3 12.1s4.8 4.2 8.5 4.2c2.5 0 4.5-0.6 6.2-1.9 1.7-1 3.3-3.1 4.7-6zm-1.2-11.6c-0.1-4.1-1-7.2-2.8-9.5-1.8-2.2-4.2-3.4-7.3-3.4s-5.6 1.1-7.6 3.4-3.1 5.4-3.5 9.5h21.2z" fill="#2d2d2d"/><path d="m1440.3 254.3v34.2h-92.2v-34.2h21.5v-80.1h-19.9v-34.2h19.9v-13.7c0-15.6 4.8-28.7 14.5-39.2s24-15.7 43.2-15.7c23.2 0 39.7 7 49.5 20.9l-34.4 26.8c-3.1-10.6-7.5-16-13.2-16-8.2 0-12.3 6.9-12.3 20.6v16.3h23.3v34.2h-23.3v80.1h23.4zm140-10.6l36.8 11.8c-15.4 24.2-39.6 36.3-72.4 36.3-26.2 0-46.6-6.9-61.3-20.7s-22-32-22-54.5c0-22.9 7.6-42 22.7-57.4 15.1-15.3 34.4-23 57.8-23 17 0 31.7 4.3 44 12.9 12.4 8.6 21 19.3 25.8 32.1s7.2 27 7.2 42.8h-110.6c0.7 13.5 5 23.1 12.8 28.7s16.1 8.4 24.8 8.4c11.4 0.1 22.9-5.8 34.4-17.4zm-9-46c-1.1-8.3-4.3-15.3-9.7-21.2-5.4-5.8-12.7-8.7-22-8.7-17.4 0-27.5 10-30.4 29.9h62.1zm69.5-23.5v-34.2h70.1v13.8c14.3-10.7 28.8-16.1 43.6-16.1 30 0 44.9 19.1 44.9 57.4v59.2h22.4v34.2h-69.8v-89.9c0-8.1-1.1-13.6-3.3-16.6s-5.8-4.4-10.8-4.4c-8.8 0-17.8 3.2-27 9.7v67h22.8v34.2h-92.9v-34.2h22.7v-80.1h-22.7zm349.7-34.2v60.3h-33.7c-7.7-16.6-19.7-24.8-36-24.8-10.4 0-18.7 3.5-24.9 10.4s-9.3 16.1-9.3 27.7c0 14 3.3 24.4 9.8 31.1s14.6 10 24.1 10c7.6 0 14.7-2.2 21.5-6.5 6.7-4.3 12.2-10.1 16.3-17.3l36.8 16.2c-13.7 29.9-37.7 44.9-72.1 44.9-25.9 0-46.5-7.1-61.9-21.2s-23.1-33-23.1-56.6 7.5-42.3 22.6-55.9c15.1-13.7 32.6-20.5 52.7-20.5 16.1 0 31 4.9 44.9 14.6v-12.3h32.3v-0.1zm143.1 103.7l36.8 11.8c-15.4 24.2-39.6 36.3-72.4 36.3-26.2 0-46.6-6.9-61.3-20.7s-22-32-22-54.5c0-22.9 7.6-42 22.7-57.4 15.1-15.3 34.4-23 57.8-23 17 0 31.7 4.3 44 12.9 12.4 8.6 21 19.3 25.8 32.1s7.2 27 7.2 42.8h-110.6c0.7 13.5 5 23.1 12.8 28.7s16.1 8.4 24.8 8.4c11.4 0.1 22.8-5.8 34.4-17.4zm-9-46c-1.1-8.3-4.3-15.3-9.7-21.2-5.4-5.8-12.7-8.7-22-8.7-17.4 0-27.5 10-30.4 29.9h62.1z" fill="#2d2d2d"/><path d="m639.74 289.8l-60.9-178.7h-22.5v-36h96.2v36h-22.1l34.7 102.5 32.5-102.5h-19.3v-36h76.7v36h-19.8l35 102.5 33.6-102.5h-21.3v-36h85.4v36h-23.2l-58.9 178.7h-39.9l-33.6-97.4-31.8 97.4h-40.8zm286.5 2c-21.9 0-40.4-6.9-55.4-20.8-15.1-13.9-22.6-32.8-22.6-57 0-24.1 7.5-43.1 22.6-57s33.6-20.8 55.4-20.8c22 0 40.5 6.9 55.5 20.8s22.5 32.9 22.5 57c0 23.8-7.4 42.7-22.3 56.8-14.8 14-33.4 21-55.7 21zm-0.1-36.8c8.8 0 15.9-3.4 21.4-10.1s8.2-17.3 8.2-31.8c0-12.7-2.7-22.6-8-29.7s-12.5-10.7-21.6-10.7c-19.5 0-29.3 14.1-29.3 42.3 0 11.6 2.4 21.1 7.3 28.6 4.8 7.7 12.2 11.4 22 11.4zm203.1-0.7v34.2h-104.5v-34.2h27.4v-80.1h-25.8v-34.2h69.2v37.7c2.7-10.8 8.7-20.2 18.2-28.1s20.6-11.9 33.5-11.9c2.1 0 4.7 0.1 7.7 0.2v44.8c-12 0-21.7 1.3-29.3 4s-13.8 8.5-18.7 17.5-7.4 19.6-7.4 31.9v18.2h29.7zm218.7 0v34.2h-71.8v-17.7c-13.2 13.2-27.5 19.8-42.9 19.8-18.5 0-33.9-7.5-46-22.5-12.2-15-18.3-33.2-18.3-54.6 0-21.7 6.2-40 18.7-54.8 12.5-14.9 27.7-22.3 45.7-22.3 17.3 0 31.5 6.7 42.8 20.2v-47.3h-23.2v-34.2h70.6v179.2h24.4zm-71.3-40.4c0-14.2-3.1-24.3-9.1-30.4-6.1-6-13-9.1-20.8-9.1-9.3 0-16.5 3.6-21.6 10.8s-7.6 16.7-7.6 28.5c0 11.1 2.5 20.5 7.5 28.1s12.3 11.4 21.8 11.4c7.9 0 14.8-3.1 20.8-9.3 6-6 9-16.1 9-30z" fill="#00719e"/></g><g fill="#2d2d2d" fill-rule="nonzero"><path d="m2179.9 165.6v-27.2h-8.6v-5.4h23.3v5.4h-8.6v27.2h-6.1z"/><path d="m2199.2 165.6v-32.6h8.8l4.7 15.8c0.4 1.4 0.8 2.8 1.1 4.2s0.5 2.7 0.7 4c0.3-1.2 0.6-2.5 0.9-3.7 0.3-1.3 0.7-2.7 1.2-4.3l4.8-15.9h8.4v32.6h-5.3v-27.4l-0.9 3.6c-0.3 1.2-0.7 2.4-1 3.6l-5.9 20.1h-4.5l-5.8-20.1c-0.6-2.1-1-3.6-1.3-4.6-0.2-1-0.5-1.8-0.6-2.6v27.3h-5.3z"/></g><clipPath id="b"><path d="m488.74 70.6c-119.9-3.9-226.9-65.2-235.4-70.2v-0.4s-111.1 66.5-236 70.6c0 0-43.5 163 7.3 327.9h456.9c50.7-164.9 7.2-327.9 7.2-327.9z"/></clipPath><g clip-path="url(#b)" fill-rule="nonzero"><path d="m24.539 398.6h228.8v-398.6s-111.1 66.5-236 70.6c-0.1 0-43.6 163 7.2 328z" fill="#00719e"/><path d="m488.74 70.6c-119.9-3.9-226.9-65.2-235.4-70.2v398.1h228.1c50.8-164.9 7.3-327.9 7.3-327.9z" fill="#008dc2"/></g><clipPath id="a"><path d="m488.74 70.6c-119.9-3.9-226.9-65.2-235.4-70.2v-0.4s-111.1 66.5-236 70.6c0 0-43.5 163 7.3 327.9h456.9c50.7-164.9 7.2-327.9 7.2-327.9z"/></clipPath><g clip-path="url(#a)" fill="#fff" fill-rule="nonzero"><path d="m537.94 363.5c-135.5-83.6-283.1-78.1-284.6-78l-0.3-6c0.4 0 38-1.6 92.1 7.4 49.8 8.2 124.3 27.3 196 71.5l-3.2 5.1z"/><path d="m543.04 338.2c-138-85.1-288.1-79.5-289.6-79.4l-0.4-9.2c1.6-0.1 39-1.6 94.3 7.5 51 8.4 127.2 28 200.6 73.2l-4.9 7.9z"/><path d="m-32.061 363.5c135.5-83.6 283.1-78.1 284.6-78l0.3-6c-0.4 0-38-1.6-92.1 7.4-49.8 8.2-124.3 27.3-196 71.5l3.2 5.1z"/><path d="m-37.161 338.2c138-85.1 288.1-79.5 289.6-79.4l0.4-9.2c-1.6-0.1-39-1.6-94.3 7.5-51 8.4-127.2 28-200.6 73.2l4.9 7.9z"/><path d="m326.14 530.9c-67.8-219.6-60.2-369.5-58.8-389.9 2.9-3.3 4.7-7.7 4.7-12.4 0-0.9-0.1-2.6-0.2-2.6h9.5l-28.1-68-27.9 68h9.3c-0.1 0-0.2 1.7-0.2 2.6 0 4.8 1.8 9.3 4.9 12.6 1.5 21.1 8.9 170.7-58.8 389.8-4.1 13.4 34.3 20.1 72.7 20.1 39.1-0.1 77-6.8 72.9-20.2z"/><path d="m181.04 163.9l-16.9-36.6-17.2 36.6h10v252h14v-252h10.1z"/><path d="m113.04 189.9l-12.8-32.8-13.3 32.8h7v223h12v-223h7.1z"/><path d="m47.939 212.9l-11.8-28.9-12.2 28.9h7v198h10v-198h7z"/><path d="m324.94 163.9l16.9-36.6 17.1 36.6h-10v252h-14v-252h-10z"/><path d="m392.94 189.9l12.8-32.8 13.2 32.8h-7v223h-12v-223h-7z"/><path d="m458.04 212.9l11.7-28.9 12.3 28.9h-7.1v198h-10v-198h-6.9z"/></g></svg>
     1<?xml version="1.0" encoding="utf-8"?>
     2<!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
     3<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     4     viewBox="0 0 2230 399" style="enable-background:new 0 0 2230 399;" xml:space="preserve">
     5<style type="text/css">
     6    .st0{fill:#00719E;}
     7    .st1{fill:#2E2E2E;}
     8    .st2{fill:#FFFFFF;}
     9    .st3{fill:#218DC1;}
     10    .st4{fill:#1A719D;}
     11    .st5{fill:#2B2C2B;}
     12</style>
     13<g>
     14    <path d="M772.6,373.8l2.6-2.9c5.8,5.3,11.1,7.8,18.8,7.8c7.9,0,13.3-4.4,13.3-10.4v-0.2c0-5.6-2.9-8.8-14.9-11.2
     15        c-12.6-2.6-17.7-6.8-17.7-14.8V342c0-7.8,7.1-13.8,16.9-13.8c7.7,0,12.7,2.1,18,6.4l-2.5,3.1c-5-4.3-9.9-5.9-15.7-5.9
     16        c-7.7,0-12.8,4.4-12.8,9.9v0.2c0,5.6,2.9,8.9,15.3,11.5c12.2,2.5,17.3,6.8,17.3,14.5v0.2c0,8.5-7.3,14.3-17.4,14.3
     17        C785.3,382.3,778.9,379.5,772.6,373.8"/>
     18    <path d="M853,360.6c-0.5-7.7-5-14.9-13.7-14.9c-7.6,0-13.4,6.4-14.1,14.9H853z M821.3,362.4v-0.2c0-11.1,7.8-20,18.2-20
     19        c10.7,0,17.6,8.7,17.6,20c0,0.7,0,0.9-0.1,1.5h-31.7c0.7,9.5,7.5,15.1,15,15.1c5.9,0,10-2.6,13.1-6l2.6,2.3
     20        c-3.9,4.2-8.5,7.2-15.8,7.2C830,382.4,821.3,374.4,821.3,362.4"/>
     21    <path d="M865.8,362.5v-0.2c0-10.7,8.6-20,19.5-20c7.2,0,11.7,3.3,15.3,7.1l-2.6,2.7c-3.3-3.4-7.1-6.3-12.8-6.3
     22        c-8.7,0-15.5,7.3-15.5,16.4v0.2c0,9.2,7,16.6,15.8,16.6c5.4,0,9.6-2.8,12.8-6.4l2.6,2.3c-3.9,4.4-8.6,7.6-15.6,7.6
     23        C874.3,382.4,865.8,373.2,865.8,362.5"/>
     24    <path d="M911.3,366.6v-23.4h3.7V366c0,7.9,4.4,13.1,12.2,13.1c7.5,0,13.3-5.7,13.3-13.7v-22.1h3.7v38.3h-3.7v-7.1
     25        c-2.6,4.5-6.8,8-13.8,8C916.9,382.4,911.3,375.8,911.3,366.6"/>
     26    <path d="M958.8,343.2h3.7v10.9c3-6.8,9.4-11.8,17-11.5v4.1h-0.4c-8.9,0-16.6,6.7-16.6,19.1v15.7h-3.7V343.2z"/>
     27    <path d="M990.1,343.2h3.7v38.3h-3.7V343.2z M989.6,328.2h4.6v5h-4.6V328.2z"/>
     28    <path d="M1009,343.2h3.7v7.1c2.6-4.5,6.8-8,13.8-8c9.7,0,15.3,6.6,15.3,15.8v23.4h-3.7v-22.7c0-7.9-4.4-13.1-12.2-13.1
     29        c-7.5,0-13.3,5.7-13.3,13.7v22.1h-3.7V343.2z"/>
     30    <path d="M1087.9,360.6v-0.2c0-8.9-7.9-14.6-15.8-14.6c-8,0-14.8,5.6-14.8,14.5v0.2c0,8.6,6.9,14.6,14.8,14.6
     31        C1080,375.1,1087.9,369.3,1087.9,360.6 M1055,387.8l2.2-3c4.6,3.5,9.8,5.4,15.5,5.4c8.8,0,15-5,15-14.9v-5.6
     32        c-3.3,4.7-8.4,8.9-16,8.9c-9.2,0-18.4-7.1-18.4-18v-0.1c0-11,9.2-18.2,18.4-18.2c7.7,0,12.8,4.1,16,8.6v-7.7h3.7v32.3
     33        c0,5.6-1.8,9.9-4.9,13c-3.3,3.3-8.3,5.1-13.9,5.1C1066.2,393.7,1060.2,391.7,1055,387.8"/>
     34    <path d="M1126.3,392.1l1.3-3.2c2,1,3.7,1.4,6.5,1.4c4,0,6.6-2.3,9.5-9l-18.4-38.1h4.3l15.9,34.2l13.8-34.2h4.1l-16.6,39.6
     35        c-3.4,8-7.3,10.9-12.8,10.9C1131,393.7,1128.9,393.2,1126.3,392.1"/>
     36    <path d="M1204.6,362.5v-0.2c0-9.2-6.9-16.6-15.8-16.6c-9.1,0-15.6,7.4-15.6,16.4v0.2c0,9.2,6.9,16.6,15.8,16.6
     37        C1198.1,379,1204.6,371.5,1204.6,362.5 M1169.3,362.5v-0.2c0-10.7,8.3-20,19.7-20c11.3,0,19.6,9.2,19.6,19.9v0.2
     38        c0,10.7-8.3,20-19.7,20C1177.5,382.4,1169.3,373.2,1169.3,362.5"/>
     39    <path d="M1219.9,366.6v-23.4h3.7V366c0,7.9,4.4,13.1,12.2,13.1c7.5,0,13.3-5.7,13.3-13.7v-22.1h3.7v38.3h-3.7v-7.1
     40        c-2.6,4.5-6.8,8-13.8,8C1225.5,382.4,1219.9,375.8,1219.9,366.6"/>
     41    <path d="M1267.4,343.2h3.7v10.9c3-6.8,9.4-11.8,17-11.5v4.1h-0.4c-8.9,0-16.6,6.7-16.6,19.1v15.7h-3.7V343.2z"/>
     42    <polygon class="st0" points="1317.2,329 1327.1,329 1339.7,367.9 1352.6,328.8 1360.4,328.8 1373.3,367.9 1385.8,329 1395.5,329
     43        1377.2,381.9 1369.3,381.9 1356.3,344.1 1343.4,381.9 1335.5,381.9    "/>
     44    <path class="st0" d="M1430.8,361.9v-0.2c0-7-5-12.8-12.2-12.8c-7.3,0-11.9,5.7-11.9,12.6v0.2c0,6.9,5,12.8,12.1,12.8
     45        C1426.1,374.5,1430.8,368.7,1430.8,361.9 M1397.6,361.9v-0.2c0-11.3,9-20.7,21.2-20.7c12.2,0,21.1,9.2,21.1,20.6v0.2
     46        c0,11.3-9,20.6-21.2,20.6C1406.5,382.4,1397.6,373.2,1397.6,361.9"/>
     47    <path class="st0" d="M1449.8,341.9h9.1v8.9c2.5-5.9,7.1-10,14-9.7v9.6h-0.5c-8,0-13.5,5.2-13.5,15.7v15.1h-9.1V341.9z"/>
     48    <path class="st0" d="M1510.5,361.8v-0.2c0-7.7-5.4-12.7-11.5-12.7c-6.2,0-11.4,4.8-11.4,12.7v0.2c0,7.7,5.3,12.7,11.4,12.7
     49        C1505.1,374.4,1510.5,369.3,1510.5,361.8 M1478.4,361.8v-0.2c0-13.1,8.9-20.6,18.4-20.6c6.5,0,10.7,3.3,13.5,7v-21.3h9.1v54.8h-9.1
     50        v-6.6c-2.9,4.1-7.1,7.4-13.5,7.4C1487.5,382.3,1478.4,374.9,1478.4,361.8"/>
     51    <path class="st0" d="M1552.5,356.3c7,0,11.3-3.9,11.3-9.4v-0.1c0-6.2-4.4-9.4-11.3-9.4h-10.7v18.9H1552.5z M1532.5,329h20.7
     52        c12.2,0,20,7,20,17.6v0.2c0,11.8-9.5,17.9-21,17.9h-10.4v16.9h-9.2V329z"/>
     53    <path class="st0" d="M1582.3,341.9h9.1v8.9c2.5-5.9,7.1-10,14-9.7v9.6h-0.5c-8,0-13.5,5.2-13.5,15.7v15.1h-9.1V341.9z"/>
     54    <path class="st0" d="M1639.9,358.9c-0.6-5.9-4.1-10.4-10.1-10.4c-5.6,0-9.5,4.3-10.3,10.4H1639.9z M1610.6,361.8v-0.2
     55        c0-11.3,8-20.6,19.4-20.6c12.6,0,19,9.9,19,21.3c0,0.8-0.1,1.7-0.2,2.6h-29.1c1,6.5,5.6,10.1,11.4,10.1c4.4,0,7.6-1.7,10.7-4.7
     56        l5.3,4.7c-3.8,4.5-8.9,7.4-16.2,7.4C1619.4,382.4,1610.6,374.1,1610.6,361.8"/>
     57    <path class="st0" d="M1655.6,376.3l4.1-6.2c4.3,3.2,8.9,4.9,13,4.9c3.9,0,6.2-1.7,6.2-4.3v-0.2c0-3.1-4.2-4.1-8.9-5.6
     58        c-5.9-1.7-12.4-4.1-12.4-11.6v-0.2c0-7.5,6.2-12.1,14.1-12.1c5,0,10.4,1.7,14.6,4.5l-3.6,6.5c-3.8-2.3-7.9-3.8-11.2-3.8
     59        c-3.5,0-5.6,1.6-5.6,4v0.2c0,2.9,4.3,4.1,8.9,5.6c5.8,1.8,12.3,4.4,12.3,11.6v0.2c0,8.3-6.5,12.5-14.7,12.5
     60        C1666.8,382.3,1660.5,380.2,1655.6,376.3"/>
     61    <path class="st0" d="M1693.1,376.3l4.1-6.2c4.3,3.2,8.9,4.9,13,4.9c3.9,0,6.2-1.7,6.2-4.3v-0.2c0-3.1-4.2-4.1-8.9-5.6
     62        c-5.9-1.7-12.4-4.1-12.4-11.6v-0.2c0-7.5,6.2-12.1,14.1-12.1c5,0,10.4,1.7,14.6,4.5l-3.6,6.5c-3.8-2.3-7.9-3.8-11.2-3.8
     63        c-3.5,0-5.6,1.6-5.6,4v0.2c0,2.9,4.3,4.1,8.9,5.6c5.8,1.8,12.3,4.4,12.3,11.6v0.2c0,8.3-6.5,12.5-14.7,12.5
     64        C1704.3,382.3,1698.1,380.2,1693.1,376.3"/>
     65    <polygon points="1755.8,343.2 1760,343.2 1771.5,376.9 1783.1,343.1 1786,343.1 1797.6,376.9 1809.1,343.2 1813.1,343.2
     66        1799.1,381.8 1795.9,381.8 1784.5,349 1773,381.8 1769.9,381.8    "/>
     67    <path d="M1851.7,360.6c-0.5-7.7-5-14.9-13.7-14.9c-7.6,0-13.4,6.4-14.1,14.9H1851.7z M1820,362.4v-0.2c0-11.1,7.8-20,18.2-20
     68        c10.7,0,17.6,8.7,17.6,20c0,0.7,0,0.9-0.1,1.5h-31.7c0.7,9.5,7.5,15.1,15,15.1c5.9,0,10-2.6,13.1-6l2.6,2.3
     69        c-3.9,4.2-8.5,7.2-15.8,7.2C1828.7,382.4,1820,374.4,1820,362.4"/>
     70    <path d="M1901.3,362.5v-0.2c0-10.1-7-16.5-15-16.5c-8,0-15.6,6.7-15.6,16.4v0.2c0,9.8,7.7,16.4,15.6,16.4
     71        C1894.6,378.9,1901.3,372.8,1901.3,362.5 M1870.9,373.2v8.3h-3.7v-54.8h3.7v25.1c3.3-5,8.2-9.5,15.8-9.5c9.2,0,18.6,7.4,18.6,19.9
     72        v0.2c0,12.5-9.4,20-18.6,20C1879,382.4,1874,378.1,1870.9,373.2"/>
     73    <path d="M1914.2,376.7l2.2-2.9c4.2,3.2,8.9,5,13.7,5c5.2,0,9.2-2.9,9.2-7.3v-0.2c0-4.5-4.8-6.2-10.1-7.7
     74        c-6.2-1.8-13.1-3.7-13.1-10.5v-0.2c0-6.2,5.2-10.6,12.6-10.6c4.6,0,9.8,1.7,13.6,4.2l-2,3.1c-3.5-2.3-7.7-3.8-11.8-3.8
     75        c-5.3,0-8.7,2.9-8.7,6.7v0.2c0,4.3,5.2,5.9,10.7,7.4c6.2,1.7,12.6,4,12.6,10.7v0.2c0,6.8-5.9,11.2-13.2,11.2
     76        C1924.3,382.3,1918.2,380,1914.2,376.7"/>
     77    <path d="M1956,343.2h3.7v38.3h-3.7V343.2z M1955.6,328.2h4.6v5h-4.6V328.2z"/>
     78    <path d="M1977,371.7v-25.1h-5.6v-3.4h5.6V331h3.7v12.2h13.4v3.4h-13.4v24.7c0,5.5,3.2,7.4,7.7,7.4c1.9,0,3.5-0.4,5.6-1.4v3.5
     79        c-2,0.9-3.8,1.4-6.2,1.4C1981.8,382.2,1977,379,1977,371.7"/>
     80    <path d="M2033.7,360.6c-0.5-7.7-5-14.9-13.7-14.9c-7.6,0-13.4,6.4-14.1,14.9H2033.7z M2001.9,362.4v-0.2c0-11.1,7.8-20,18.2-20
     81        c10.7,0,17.6,8.7,17.6,20c0,0.7,0,0.9-0.1,1.5h-31.7c0.7,9.5,7.5,15.1,15,15.1c5.9,0,10-2.6,13.1-6l2.6,2.3
     82        c-3.9,4.2-8.5,7.2-15.8,7.2C2010.7,382.4,2001.9,374.4,2001.9,362.4"/>
     83    <path class="st1" d="M2141.5,196.9c-1.1-8.3-4.4-15.4-9.8-21.3c-5.4-5.9-12.8-8.8-22.2-8.8c-17.5,0-27.7,10-30.6,30.1H2141.5z
     84         M2150.6,243.3l37.1,11.9c-15.5,24.4-39.8,36.6-72.9,36.6c-26.4,0-46.9-6.9-61.7-20.9c-14.8-13.9-22.2-32.2-22.2-54.8
     85        c0-23.1,7.6-42.3,22.9-57.8c15.2-15.4,34.6-23.2,58.2-23.2c17.1,0,31.9,4.3,44.3,13c12.5,8.6,21.1,19.4,25.9,32.3
     86        c4.8,12.9,7.3,27.2,7.3,43.1h-111.4c0.7,13.6,5,23.2,12.9,28.9c7.9,5.7,16.2,8.5,24.9,8.5C2127.4,260.9,2139,255,2150.6,243.3
     87         M2006.5,138.8v60.7h-34c-7.7-16.7-19.8-25-36.3-25c-10.5,0-18.9,3.5-25.1,10.4c-6.2,7-9.3,16.2-9.3,27.9c0,14.1,3.3,24.5,9.9,31.3
     88        c6.6,6.7,14.7,10.1,24.2,10.1c7.6,0,14.8-2.2,21.6-6.6c6.8-4.4,12.2-10.2,16.4-17.4l37.1,16.3c-13.8,30.1-38,45.2-72.6,45.2
     89        c-26.1,0-46.8-7.1-62.3-21.3c-15.5-14.2-23.2-33.2-23.2-57c0-23.8,7.6-42.5,22.8-56.3c15.2-13.8,32.9-20.6,53.1-20.6
     90        c16.2,0,31.3,4.9,45.3,14.7v-12.4H2006.5z M1654.3,173.3v-34.4h70.6v13.9c14.4-10.8,29-16.2,43.9-16.2c30.2,0,45.3,19.3,45.3,57.8
     91        v59.6h22.6v34.4h-70.3v-90.5c0-8.1-1.1-13.7-3.3-16.7c-2.2-3-5.8-4.5-10.9-4.5c-8.9,0-17.9,3.2-27.2,9.7v67.5h23v34.4h-93.6v-34.4
     92        h22.9v-80.6H1654.3z M1584.4,196.9c-1.1-8.3-4.4-15.4-9.8-21.3c-5.4-5.9-12.8-8.8-22.2-8.8c-17.5,0-27.7,10-30.6,30.1H1584.4z
     93         M1593.5,243.3l37.1,11.9c-15.5,24.4-39.8,36.6-72.9,36.6c-26.4,0-46.9-6.9-61.7-20.9c-14.8-13.9-22.2-32.2-22.2-54.8
     94        c0-23.1,7.6-42.3,22.9-57.8c15.2-15.4,34.6-23.2,58.2-23.2c17.1,0,31.9,4.3,44.3,13c12.5,8.6,21.1,19.4,25.9,32.3
     95        c4.8,12.9,7.3,27.2,7.3,43.1H1521c0.7,13.6,5,23.2,12.9,28.9c7.9,5.7,16.2,8.5,24.9,8.5C1570.3,260.9,1581.8,255,1593.5,243.3
     96         M1452.5,253.9v34.4h-92.8v-34.4h21.6v-80.6h-20.1v-34.4h20.1v-13.7c0-15.8,4.9-28.9,14.6-39.5c9.7-10.6,24.2-15.8,43.5-15.8
     97        c23.4,0,40,7,49.9,21l-34.6,27c-3.1-10.7-7.5-16.1-13.3-16.1c-8.2,0-12.4,6.9-12.4,20.7v16.4h23.5v34.4H1429v80.6H1452.5z"/>
     98    <path class="st0" d="M1287.6,213.3c0-14.3-3.1-24.5-9.2-30.6c-6.1-6.1-13.1-9.1-20.9-9.1c-9.4,0-16.6,3.6-21.7,10.9
     99        c-5.1,7.3-7.6,16.8-7.6,28.7c0,11.2,2.5,20.7,7.6,28.3c5,7.7,12.4,11.5,21.9,11.5c7.9,0,14.9-3.1,20.9-9.3
     100        C1284.6,237.4,1287.6,227.3,1287.6,213.3 M1359.4,253.9v34.4h-72.3v-17.8c-13.3,13.3-27.7,20-43.3,20c-18.6,0-34.1-7.6-46.3-22.7
     101        c-12.3-15.1-18.4-33.5-18.4-55c0-21.8,6.3-40.2,18.8-55.2c12.6-15,27.9-22.5,46-22.5c17.4,0,31.8,6.8,43.1,20.3v-47.5h-23.3V73.5
     102        h71.1v180.4H1359.4z M1139.2,253.9v34.4H1034v-34.4h27.6v-80.6h-25.9v-34.4h69.7v38c2.7-10.9,8.8-20.4,18.3-28.3
     103        c9.5-8,20.8-12,33.8-12c2.2,0,4.7,0.1,7.7,0.2v45.1c-12,0-21.9,1.3-29.5,4c-7.6,2.7-13.9,8.6-18.8,17.6c-4.9,9.1-7.4,19.8-7.4,32.1
     104        v18.4H1139.2z M934.7,254.7c8.9,0,16-3.4,21.5-10.2c5.5-6.8,8.3-17.5,8.3-32c0-12.8-2.7-22.7-8-29.9c-5.3-7.2-12.6-10.7-21.8-10.7
     105        c-19.7,0-29.5,14.2-29.5,42.6c0,11.6,2.4,21.2,7.3,28.8C917.4,250.9,924.8,254.7,934.7,254.7 M934.8,291.7c-22,0-40.6-7-55.8-20.9
     106        c-15.2-14-22.8-33.1-22.8-57.4c0-24.3,7.6-43.4,22.8-57.4c15.2-14,33.8-20.9,55.8-20.9c22.1,0,40.8,7,55.9,20.9
     107        c15.1,14,22.7,33.1,22.7,57.4c0,24-7.5,43-22.5,57.1C976,284.7,957.3,291.7,934.8,291.7 M646.3,289.7L585,109.8h-22.7V73.5h96.8
     108        v36.3h-22.2L671.8,213l32.7-103.2h-19.5V73.5h77.2v36.3h-19.9L777.6,213l33.8-103.2h-21.5V73.5h86v36.3h-23.3l-59.3,179.9h-40.2
     109        l-33.8-98.1l-32,98.1H646.3z"/>
     110    <g>
     111        <path class="st2" d="M238.5,280.2C238.5,280.2,238.6,280.2,238.5,280.2C238.6,280.2,238.5,280.2,238.5,280.2L238.5,280.2z"/>
     112        <path class="st3" d="M257.4,79.6L257.4,79.6l26,57.2l0.2,0.5l-8.9,0c0,0.1,0,0.1,0,0.2c0.1,0.8,0.3,1.7,0.3,2.6
     113            c0,2.8-0.7,5.4-2,7.7c-0.6,1.1-1.2,2.1-2,3c0,0-1.2,12.5-1,35.7c0,0,0,0.1,0,0.1c0.1,13.9,0.8,34.5,2.5,56.9
     114            c27.2,1.5,52.5,4.6,75.7,8.7l0-97l-6.8,0l17.4-38.1l16.7,38.3l-6.8,0l0,100.9c24.8,5.1,46.8,11.3,65.8,17.5l0-84.5l-6.8,0
     115            l17.4-38.1l16.7,38.3l-6.8,0l0,91.5c22.5,8.3,39.3,16.2,49.7,21.6c13-122.2-13.6-228.2-13.6-228.2c-123.7-4-233.7-69.8-233.7-69.8
     116            V79.6z"/>
     117        <path class="st3" d="M455,302.5l0,95.5h12.1v0h2.9h7.5v0h6.5c4.1-13.2,7.6-26.9,10.6-40.2l0,0c3.7-13.3,5.9-24.3,7.3-32.2
     118            c0,0,0.1-0.3,0.1-0.4c0.1-0.5,0.2-1,0.2-1.5C494.8,319.8,478.7,311.6,455,302.5z"/>
     119        <path class="st3" d="M368.7,276.8l0,121.2h12.1v0h22.3v0h11.7h19.7l0-103C415.8,288.7,393.7,282.3,368.7,276.8z"/>
     120        <path class="st3" d="M348.3,398V272.7c-22.7-4.1-47.5-7.3-74.1-9c0,0.1,0,0.2,0,0.3c0.1,0.5,1.7,13.9,2,16.1
     121            c4.1,30.9,12.5,79.7,21.1,117.7h-0.4c0,0,0,0,0,0.1v0h42.2v0l0,0H348.3z"/>
     122        <path class="st4" d="M217.5,397.9c8.6-38,16.9-86.8,21.1-117.7c0,0-0.1,0-0.1,0l0,0c0,0,0.1,0,0.1,0c0.3-2.2,2-15.6,2-16.1
     123            c0-0.1,0-0.2,0-0.3c-26.8,1.7-51.6,4.9-74.1,9V398v0h9.2v0h42.2c0,0,0,0,0,0c0,0,0,0,0-0.1H217.5z"/>
     124        <path class="st4" d="M59.8,280.8l0-91.5l-6.8,0L69.7,151l17.4,38.1l-6.8,0l0,84.5c19-6.2,41-12.3,65.8-17.5l0-100.9l-6.8,0
     125            l16.7-38.3l17.4,38.1l-6.8,0l0,97c23.2-4,48.5-7.2,75.7-8.7c1.6-22.5,2.4-43,2.5-56.9c0,0,0-0.1,0-0.1c0.1-23.2-1-35.7-1-35.7
     126            c-0.8-0.9-1.4-1.9-2-3c-1.2-2.3-2-4.9-2-7.7c0-0.9,0.1-1.7,0.3-2.6c0-0.1,0-0.1,0-0.2l-8.9,0l0.2-0.5l26-57.1l0,0V4.3
     127            c0,0-110,65.8-233.7,69.8c0,0-26.5,106-13.6,228.2C20.5,297.1,37.3,289.2,59.8,280.8z"/>
     128        <path class="st4" d="M80.3,294.9l0,103.1H100h11.7v0H134v0v0h12.1v0l0-121.2C120.2,282.4,98,288.9,80.3,294.9z"/>
     129        <path class="st4" d="M12.8,323.7C12.8,323.7,12.7,323.7,12.8,323.7c0.1,0.5,0.1,1,0.2,1.5c0,0.1,0,0.3,0.1,0.4c0,0,0,0,0,0
     130            c1.4,7.9,3.6,18.9,7.3,32.2l0,0c3,13.3,6.5,26.9,10.6,40.2h6.5v0h10.3v0h12.1l0-95.6C36.2,311.5,20,319.7,12.8,323.7z"/>
     131    </g>
     132    <g>
     133        <path class="st5" d="M2206.7,132.5c9.4,0,16.7,7.3,16.7,16.4c0,9.3-7.3,16.5-16.8,16.5c-9.4,0-16.9-7.2-16.9-16.5
     134            c0-9.1,7.5-16.4,16.9-16.4H2206.7z M2206.5,135.8c-7.2,0-12.6,5.9-12.6,13.1c0,7.3,5.4,13.1,12.8,13.1c7.2,0.1,12.5-5.8,12.5-13.1
     135            C2219.2,141.7,2213.9,135.8,2206.5,135.8L2206.5,135.8z M2204,157.4h-3.8v-16.3c1.5-0.3,3.6-0.6,6.3-0.6c3.1,0,4.5,0.5,5.7,1.3
     136            c0.9,0.7,1.6,2,1.6,3.5c0,1.9-1.4,3.3-3.4,3.9v0.2c1.6,0.5,2.5,1.8,3,4c0.5,2.5,0.8,3.5,1.2,4h-4.1c-0.5-0.6-0.8-2-1.3-3.9
     137            c-0.3-1.8-1.3-2.6-3.4-2.6h-1.8V157.4z M2204.1,148.2h1.8c2.1,0,3.8-0.7,3.8-2.4c0-1.5-1.1-2.5-3.5-2.5c-1,0-1.7,0.1-2.1,0.2
     138            V148.2z"/>
     139    </g>
     140</g>
     141</svg>
  • wordfence/tags/7.3.5/lib/wfActivityReport.php

    r1949784 r2124102  
    590590                $paramValue = base64_decode($actionData['paramValue']);
    591591                if (strlen($paramValue) > 100) {
    592                     $paramValue = substr($paramValue, 0, 100) . chr(2026);
     592                    $paramValue = substr($paramValue, 0, 100) . '...';
    593593                }
    594594               
  • wordfence/tags/7.3.5/lib/wfConfig.php

    r2107617 r2124102  
    14091409                {
    14101410                    $wafConfig->setConfig($key, wfUtils::truthyToInt($value));
     1411                    if (method_exists(wfWAF::getInstance()->getStorageEngine(), 'purgeIPBlocks')) {
     1412                        wfWAF::getInstance()->getStorageEngine()->purgeIPBlocks(wfWAFStorageInterface::IP_BLOCKS_BLACKLIST);
     1413                    }
    14111414                    $saved = true;
    14121415                    break;
     
    14571460                    }
    14581461                   
     1462                    if (method_exists(wfWAF::getInstance()->getStorageEngine(), 'purgeIPBlocks')) {
     1463                        wfWAF::getInstance()->getStorageEngine()->purgeIPBlocks(wfWAFStorageInterface::IP_BLOCKS_BLACKLIST);
     1464                    }
     1465                   
    14591466                    $saved = true;
    14601467                    break;
     
    14701477                   
    14711478                    $wafConfig->setConfig('whitelistedServiceIPs', @json_encode(wfUtils::whitelistedServiceIPs()));
     1479                   
     1480                    if (method_exists(wfWAF::getInstance()->getStorageEngine(), 'purgeIPBlocks')) {
     1481                        wfWAF::getInstance()->getStorageEngine()->purgeIPBlocks(wfWAFStorageInterface::IP_BLOCKS_BLACKLIST);
     1482                    }
     1483                   
    14721484                    $saved = true;
    14731485                    break;
     
    16671679                }
    16681680                else if (WFWAF_DEBUG) {
    1669                     //TODO: remove me when done with QA
    16701681                    error_log("*** DEBUG: Config option '{$key}' missing save handler.");
    16711682                }
  • wordfence/tags/7.3.5/lib/wordfenceClass.php

    r2107617 r2124102  
    32653265            $type = 2;
    32663266        }
     3267        else if (defined('DOING_AJAX') && DOING_AJAX) {
     3268            $type = 3;
     3269            if (isset($_REQUEST['action']) && ($_REQUEST['action'] == 'wordfence_ls_authenticate' || $_REQUEST['action'] == 'nopriv_wordfence_ls_authenticate')) {
     3270                $type = 301;
     3271            }
     3272        }
    32673273        else if (isset($_SERVER['SCRIPT_FILENAME']) && $_SERVER['SCRIPT_FILENAME'] == $wploginPath) {
    32683274            $type = 1;
     
    57545760        }
    57555761       
     5762        wp_register_script('chart-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/Chart.bundle.min.js'), array('jquery'), '2.4.0');
     5763        wp_register_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery'), WORDFENCE_VERSION);
     5764        wp_register_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
    57565765        wp_register_style('wordfence-font-awesome-style', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-font-awesome.css'), '', WORDFENCE_VERSION);
    57575766
     
    62466255    }
    62476256    public static function menu_tools() {
    6248         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
    6249         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery'), WORDFENCE_VERSION);
     6257        wp_enqueue_style('wordfence-select2-css');
     6258        wp_enqueue_script('wordfence-select2-js');
    62506259
    62516260        $subpage = filter_input(INPUT_GET, 'subpage', FILTER_SANITIZE_STRING);
     
    63326341        wp_enqueue_style('wordfence-jquery-ui-theme-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui.theme.min.css'), array(), WORDFENCE_VERSION);
    63336342        wp_enqueue_style('wordfence-jquery-ui-timepicker-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui-timepicker-addon.css'), array(), WORDFENCE_VERSION);
    6334         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
     6343        wp_enqueue_style('wordfence-select2-css');
    63356344       
    63366345        wp_enqueue_script('wordfence-timepicker-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery-ui-timepicker-addon.js'), array('jquery', 'jquery-ui-datepicker', 'jquery-ui-slider'), WORDFENCE_VERSION);
    6337         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery', 'jquery-ui-tooltip'), WORDFENCE_VERSION);
     6346        wp_enqueue_script('wordfence-select2-js');
    63386347       
    63396348        try {
     
    63856394        wp_enqueue_style('wordfence-jquery-ui-theme-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui.theme.min.css'), array(), WORDFENCE_VERSION);
    63866395        wp_enqueue_style('wordfence-jquery-ui-timepicker-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui-timepicker-addon.css'), array(), WORDFENCE_VERSION);
    6387         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
     6396        wp_enqueue_style('wordfence-select2-css');
    63886397
    63896398        wp_enqueue_script('wordfence-timepicker-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery-ui-timepicker-addon.js'), array('jquery', 'jquery-ui-datepicker', 'jquery-ui-slider'), WORDFENCE_VERSION);
    6390         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery', 'jquery-ui-tooltip'), WORDFENCE_VERSION);
    6391         wp_enqueue_script('chart-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/Chart.bundle.min.js'), array('jquery'), '2.4.0');
     6399        wp_enqueue_script('wordfence-select2-js');
     6400        wp_enqueue_script('chart-js');
    63926401
    63936402        try {
     
    64486457    }
    64496458    public static function menu_dashboard() {
    6450         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
    6451         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery', 'jquery-ui-tooltip'), WORDFENCE_VERSION);
    6452         wp_enqueue_script('chart-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/Chart.bundle.min.js'), array('jquery'), '2.4.0');
     6459        wp_enqueue_style('wordfence-select2-css');
     6460        wp_enqueue_script('wordfence-select2-js');
     6461        wp_enqueue_script('chart-js');
    64536462       
    64546463        if (wfConfig::get('keyType') == wfAPI::KEY_TYPE_PAID_EXPIRED || (wfConfig::get('keyType') == wfAPI::KEY_TYPE_PAID_CURRENT && wfConfig::get('keyExpDays') < 30)) {
     
    64706479    }
    64716480    public static function menu_scan() {
    6472         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
    6473         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery', 'jquery-ui-tooltip'), WORDFENCE_VERSION);
     6481        wp_enqueue_style('wordfence-select2-css');
     6482        wp_enqueue_script('wordfence-select2-js');
    64746483       
    64756484        if (isset($_GET['subpage']) && $_GET['subpage'] == 'scan_options') {
     
    64866495   
    64876496    public static function menu_support() {
    6488         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
    6489         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery'), WORDFENCE_VERSION);
     6497        wp_enqueue_style('wordfence-select2-css');
     6498        wp_enqueue_script('wordfence-select2-js');
    64906499       
    64916500        require('menu_support.php');
     
    64956504        wfConfig::set('showWfCentralUI', 1);
    64966505
    6497         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
    6498         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery'), WORDFENCE_VERSION);
     6506        wp_enqueue_style('wordfence-select2-css');
     6507        wp_enqueue_script('wordfence-select2-js');
    64996508
    65006509        require('menu_wordfence_central.php');
     
    78637872                    $paramValue = base64_decode($actionData['paramValue']);
    78647873                    if (strlen($paramValue) > 100) {
    7865                         $paramValue = substr($paramValue, 0, 100) . chr(2026);
     7874                        $paramValue = substr($paramValue, 0, 100) . '...';
    78667875                    }
    78677876                   
  • wordfence/tags/7.3.5/modules/login-security/classes/controller/ajax.php

    r2087795 r2124102  
    7373                'required_parameters' => array('nonce', 'id'),
    7474            ),
     75            'reset_recaptcha_stats' => array(
     76                'handler' => array($this, '_ajax_reset_recaptcha_stats_callback'),
     77                'permissions' => array(Controller_Permissions::CAP_MANAGE_SETTINGS => __('You do not have permission to reset reCAPTCHA statistics.', 'wordfence-2fa')),
     78                'required_parameters' => array('nonce'),
     79            ),
    7580        );
    7681       
     
    400405        foreach ($admins as $a) {
    401406            /** @var \WP_User $a */
    402             if (!Controller_Users::shared()->has_2fa_active($a)) {
     407            if (Controller_Users::shared()->has_2fa_active($a)) {
    403408                continue;
    404409            }
     
    447452        Controller_Notices::shared()->remove_notice($_POST['id'], false, wp_get_current_user());
    448453    }
     454   
     455    public function _ajax_reset_recaptcha_stats_callback() {
     456        Controller_Settings::shared()->set_array(Controller_Settings::OPTION_CAPTCHA_STATS, array('counts' => array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), 'avg' => 0));
     457        $response = array('success' => true);
     458        return die(json_encode($response));
     459    }
    449460}
  • wordfence/tags/7.3.5/modules/login-security/classes/controller/captcha.php

    r2087795 r2124102  
    112112     */
    113113    public function is_human($score) {
     114        if (Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_CAPTCHA_TEST_MODE)) {
     115            return true;
     116        }
     117       
    114118        $threshold = $this->threshold();
    115119        return ($score >= $threshold || abs($score - $threshold) < 0.0001);
  • wordfence/tags/7.3.5/modules/login-security/classes/controller/db.php

    r2087795 r2124102  
    5959    }
    6060   
     61    public function uninstall() {
     62        $tables = array(self::TABLE_2FA_SECRETS, self::TABLE_SETTINGS);
     63        foreach ($tables as $table) {
     64            global $wpdb;
     65            $wpdb->query('DROP TABLE IF EXISTS `' . self::network_table($table) . '`');
     66        }
     67    }
     68   
    6169    protected function _create_schema() {
    6270        $tables = array(
  • wordfence/tags/7.3.5/modules/login-security/classes/controller/settings.php

    r2104182 r2124102  
    1919    const OPTION_ALLOW_XML_RPC = 'allow-xml-rpc';
    2020    const OPTION_ENABLE_AUTH_CAPTCHA = 'enable-auth-captcha';
     21    const OPTION_CAPTCHA_TEST_MODE = 'recaptcha-test-mode';
    2122    const OPTION_RECAPTCHA_SITE_KEY = 'recaptcha-site-key';
    2223    const OPTION_RECAPTCHA_SECRET = 'recaptcha-secret';
    2324    const OPTION_RECAPTCHA_THRESHOLD = 'recaptcha-threshold';
     25    const OPTION_DELETE_ON_DEACTIVATION = 'delete-deactivation';
    2426   
    2527    //Internal
     
    3133    const OPTION_SHARED_SYMMETRIC_SECRET_KEY = 'shared-symmetric-secret';
    3234    const OPTION_DISMISSED_FRESH_INSTALL_MODAL = 'dismissed-fresh-install-modal';
     35    const OPTION_CAPTCHA_STATS = 'captcha-stats';
    3336   
    3437    protected $_settingsStorage;
     
    6770            self::OPTION_ALLOW_XML_RPC => array('value' => true, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
    6871            self::OPTION_ENABLE_AUTH_CAPTCHA => array('value' => false, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
     72            self::OPTION_CAPTCHA_STATS => array('value' => '{"counts":[0,0,0,0,0,0,0,0,0,0,0],"avg":0}', 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
    6973            self::OPTION_RECAPTCHA_THRESHOLD => array('value' => 0.5, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
    7074            self::OPTION_LAST_SECRET_REFRESH => array('value' => 0, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
     75            self::OPTION_DELETE_ON_DEACTIVATION => array('value' => false, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
    7176        ));
    7277    }
     
    130135            case self::OPTION_ALLOW_XML_RPC:
    131136            case self::OPTION_ENABLE_AUTH_CAPTCHA:
     137            case self::OPTION_CAPTCHA_TEST_MODE:
    132138            case self::OPTION_DISMISSED_FRESH_INSTALL_MODAL:
     139            case self::OPTION_DELETE_ON_DEACTIVATION:
    133140                return true;
    134141               
     
    139146            //Array
    140147            case self::OPTION_GLOBAL_NOTICES:
     148            case self::OPTION_CAPTCHA_STATS:
    141149                return preg_match('/^\[.*\]$/', $value) || preg_match('/^\{.*\}$/', $value); //Only a rough JSON validation
    142150               
     
    166174            case self::OPTION_RECAPTCHA_THRESHOLD:
    167175                return is_numeric($value) && $value >= 0 && $value <= 1;
     176            case self::OPTION_RECAPTCHA_SITE_KEY:
     177                if (empty($value)) {
     178                    return true;
     179                }
     180               
     181                $response = wp_remote_get('https://www.google.com/recaptcha/api.js?render=' . urlencode($value));
     182               
     183                if (!is_wp_error($response)) {
     184                    $status = wp_remote_retrieve_response_code($response);
     185                    if ($status == 200) {
     186                        return true;
     187                    }
     188                   
     189                    $data = wp_remote_retrieve_body($response);
     190                    if (strpos($data, 'grecaptcha') === false) {
     191                        return __('Unable to validate the reCAPTCHA site key. Please check the key and try again.', 'wordfence-2fa');
     192                    }
     193                    return true;
     194                }
     195                return sprintf(__('An error was encountered while validating the reCAPTCHA site key: %s', 'wordfence-2fa'), $response->get_error_message());
    168196        }
    169197        return true;
     
    202230            case self::OPTION_ALLOW_XML_RPC:
    203231            case self::OPTION_ENABLE_AUTH_CAPTCHA:
     232            case self::OPTION_CAPTCHA_TEST_MODE:
    204233            case self::OPTION_DISMISSED_FRESH_INSTALL_MODAL:
     234            case self::OPTION_DELETE_ON_DEACTIVATION:
    205235                return $this->_truthy_to_bool($value);
    206236               
  • wordfence/tags/7.3.5/modules/login-security/classes/controller/time.php

    r2104182 r2124102  
    9696        foreach ($servers as $s) {
    9797            $socket = @fsockopen('udp://' . $s, 123, $err_no, $err_str, 1);
    98             stream_set_timeout($socket, 1);
    9998            if ($socket) {
     99                stream_set_timeout($socket, 1);
    100100                $remote_originate = microtime(true);
    101101                $secondsNTP = ((int) $remote_originate) + self::NTP_EPOCH_CONVERT;
  • wordfence/tags/7.3.5/modules/login-security/classes/controller/users.php

    r2087795 r2124102  
    312312   
    313313    /**
     314     * Records the reCAPTCHA score for later display.
     315     *
     316     * This is not atomic, which means this can miscount on hits that overlap, but the overhead of being atomic is not
     317     * worth it for our use.
     318     *
     319     * @param \WP_User $user|null
     320     * @param float $score
     321     */
     322    public function record_captcha_score($user, $score) {
     323        if (!Controller_CAPTCHA::shared()->enabled()) { return; }
     324        if ($this->has_2fa_active($user)) { return; } //2FA activated users do not retrieve a score
     325       
     326        if ($user) { update_user_meta($user->ID, 'wfls-last-captcha-score', $score); }
     327        $stats = Controller_Settings::shared()->get_array(Controller_Settings::OPTION_CAPTCHA_STATS);
     328        $int_score = min(max((int) ($score * 10), 0), 10);
     329        $count = array_sum($stats['counts']);
     330        $stats['counts'][$int_score]++;
     331        $stats['avg'] = ($stats['avg'] * $count + $int_score) / ($count + 1);
     332        Controller_Settings::shared()->set_array(Controller_Settings::OPTION_CAPTCHA_STATS, $stats);
     333    }
     334   
     335    /**
    314336     * Returns the active and inactive user counts.
    315337     *
  • wordfence/tags/7.3.5/modules/login-security/classes/controller/wordfencels.php

    r2104182 r2124102  
    125125            }
    126126        }
     127       
     128        if (Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_CAPTCHA_TEST_MODE) && Controller_CAPTCHA::shared()->enabled() && Controller_Permissions::shared()->can_manage_settings()) {
     129            if (is_multisite()) {
     130                add_action('network_admin_notices', array($this, '_recaptcha_test_notice'));
     131            }
     132            else {
     133                add_action('admin_notices', array($this, '_recaptcha_test_notice'));
     134            }
     135        }
    127136    }
    128137   
     
    135144    }
    136145   
     146    public function _recaptcha_test_notice() {
     147        echo '<div class="notice notice-warning"><p>' . sprintf(__('reCAPTCHA test mode is enabled. While enabled, login and registration requests will be checked for their score but will not be blocked if the score is below the minimum score. <a href="%s">Manage Settings</a>', 'wordfence-2fa'), esc_url(network_admin_url('admin.php?page=WFLS#top#settings'))) . '</p></div>';
     148    }
     149   
    137150    /**
    138151     * Installation/Uninstallation
     
    151164            }
    152165            delete_option($opt);
     166        }
     167       
     168        if (Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_DELETE_ON_DEACTIVATION)) {
     169            Controller_DB::shared()->uninstall();
    153170        }
    154171    }
     
    243260            }
    244261            wp_enqueue_script('wordfence-ls-admin', Model_Asset::js('admin.js'), array('jquery'), WORDFENCE_LS_VERSION);
     262            if (!WORDFENCE_LS_FROM_CORE) {
     263                wp_register_script('chart-js', Model_Asset::js('Chart.bundle.min.js'), array('jquery'), '2.4.0');
     264                wp_register_script('wordfence-select2-js', Model_Asset::js('wfselect2.min.js'), array('jquery'), WORDFENCE_LS_VERSION);
     265                wp_register_style('wordfence-select2-css', Model_Asset::css('wfselect2.min.css'), array(), WORDFENCE_LS_VERSION);
     266            }
     267            wp_enqueue_script('chart-js');
     268            wp_enqueue_script('wordfence-select2-js');
     269            wp_enqueue_style('wordfence-select2-css');
    245270            wp_enqueue_style('wordfence-ls-admin', Model_Asset::css('admin.css'), array(), WORDFENCE_LS_VERSION);
    246271            wp_enqueue_style('wordfence-ls-colorbox', Model_Asset::css('colorbox.css'), array(), WORDFENCE_LS_VERSION);
    247272            wp_enqueue_style('wordfence-ls-ionicons', Model_Asset::css('ionicons.css'), array(), WORDFENCE_LS_VERSION);
     273            if (!WORDFENCE_LS_FROM_CORE) { wp_enqueue_style('wordfence-ls-font-awesome', Model_Asset::css('font-awesome.css'), array(), WORDFENCE_LS_VERSION); }
    248274            wp_localize_script('wordfence-ls-admin', 'WFLSVars', array(
    249275                'ajaxurl' => admin_url('admin-ajax.php'),
     
    400426                }
    401427               
    402                 update_user_meta($user->ID, 'wfls-last-captcha-score', $score);
     428                Controller_Users::shared()->record_captcha_score($user, $score);
    403429               
    404430                if (isset($_REQUEST['wfls-email-verification']) && !empty($_REQUEST['wfls-email-verification']) && is_string($_REQUEST['wfls-email-verification'])) {
     
    422448                    $encrypted = Model_Symmetric::encrypt((string) $user->ID);
    423449                    if ($encrypted) {
    424                         $jwt = new Model_JWT(array('user' => $encrypted), Controller_Time::time() + 60 * 15 /* minutes */);
     450                        $jwt = new Model_JWT(array('user' => $encrypted), Controller_Time::time() + 60 * WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES);
    425451                        $view = new Model_View('email/login-verification', array(
    426452                            'siteName' => get_bloginfo('name', 'raw'),
     
    618644       
    619645        if ($requireCAPTCHA) {
     646            Controller_Users::shared()->record_captcha_score(null, $score);
     647           
    620648            if (!Controller_CAPTCHA::shared()->is_human($score)) { //Score is below the human threshold, block the user registration
    621649                $encryptedIP = Model_Symmetric::encrypt(Model_Request::current()->ip());
  • wordfence/tags/7.3.5/modules/login-security/views/options/option-captcha.php

    r2089400 r2124102  
    1818                <ul class="wfls-flex-vertical wfls-flex-align-left">
    1919                    <li>
    20                         <strong id="wfls-enable-auth-captcha-label"><?php _e('Enable reCAPTCHA on the login and user registration pages', 'wordfence-2fa'); ?></strong>
     20                        <strong id="wfls-enable-auth-captcha-label"><?php _e('Enable reCAPTCHA on the login and user registration pages', 'wordfence-ls'); ?></strong>
    2121                    </li>
    22                     <li class="wfls-option-subtitle"><?php _e('Note: This feature requires a free site key and secret for the <a href="https://www.google.com/recaptcha/intro/v3.html" target="_blank" rel="noopener noreferrer">Google reCAPTCHA v3 Service</a>.', 'wordfence-2fa'); ?></li>
     22                    <li class="wfls-option-subtitle"><?php printf(__('reCAPTCHA v3 does not make users solve puzzles or click a checkbox like previous versions. The only visible part is the reCAPTCHA logo. If a visitor\'s browser fails the CAPTCHA, Wordfence will send an email to the user\'s address with a link they can click to verify that they are a user of your site. You can read further details <a href="%s" target="_blank" rel="noopener noreferrer">in our documentation</a>.', 'wordfence-ls'), \WordfenceLS\Controller_Support::esc_supportURL(\WordfenceLS\Controller_Support::ITEM_MODULE_LOGIN_SECURITY_CAPTCHA)); ?></li>
    2323                </ul>
    2424            </li>
     
    3131                <table>
    3232                    <tr class="wfls-option wfls-option-text" data-original-value="<?php echo esc_attr($siteKeyValue); ?>" data-text-option="<?php echo esc_attr($siteKeyOptionName); ?>">
    33                         <th id="wfls-enable-captcha-site-key-label" class="wfls-padding-add-bottom"><?php _e('reCAPTCHA v3 Site Key', 'wordfence'); ?></th>
     33                        <th id="wfls-enable-captcha-site-key-label" class="wfls-padding-add-bottom"><?php _e('reCAPTCHA v3 Site Key', 'wordfence-ls'); ?></th>
    3434                        <td class="wfls-option-text wfls-padding-add-bottom"><input type="text" name="recaptchaSiteKey" id="input-recaptchaSiteKey" class="wfls-form-control" value="<?php echo esc_attr($siteKeyValue); ?>"<?php if (!$currentEnableValue) { echo ' disabled'; } ?>></td>
    3535                    </tr>
    3636                    <tr class="wfls-option wfls-option-text" data-original-value="<?php echo esc_attr($secretValue); ?>" data-text-option="<?php echo esc_attr($secretOptionName); ?>">
    37                         <th id="wfls-enable-captcha-secret-label"><?php _e('reCAPTCHA v3 Secret', 'wordfence'); ?></th>
     37                        <th id="wfls-enable-captcha-secret-label"><?php _e('reCAPTCHA v3 Secret', 'wordfence-ls'); ?></th>
    3838                        <td class="wfls-option-text"><input type="text" name="recaptchaSecret" id="input-recaptchaSecret" class="wfls-form-control" value="<?php echo esc_attr($secretValue); ?>"<?php if (!$currentEnableValue) { echo ' disabled'; } ?>></td>
    3939                    </tr>
    4040                </table>
     41            </li>
     42        </ul>
     43        <ul class="wfls-option wfls-padding-no-top">
     44            <li class="wfls-option-spacer"></li>
     45            <li class="wfls-option-title">
     46                <ul class="wfls-flex-vertical wfls-flex-align-left">
     47                    <li class="wfls-option-subtitle"><?php _e('Note: This feature requires a free site key and secret for the <a href="https://www.google.com/recaptcha/intro/v3.html" target="_blank" rel="noopener noreferrer">Google reCAPTCHA v3 Service</a>.', 'wordfence-ls'); ?></li>
     48                </ul>
    4149            </li>
    4250        </ul>
  • wordfence/tags/7.3.5/modules/login-security/views/options/option-require-2fa.php

    r2087795 r2124102  
    5454                <span id="wfls-require-2fa-grace-period-label" class="wfls-padding-add-left wfls-padding-add-right"><?php _e('Grace period to require 2FA', 'wordfence'); ?> </span>
    5555                <input type="text" name="require2FAGracePeriod" id="input-require2FAGracePeriod" class="wfls-datetime wfls-form-control" placeholder="Enabled on..." data-value="<?php echo $currentGracePeriodDateValue; ?>" data-original-value="<?php echo $currentGracePeriodDateValue; ?>"<?php echo $currentGracePeriodEnabledValue ? '' : ' disabled'; ?>>
    56                 <div class="wfls-padding-add-left"><a href="#" id="wfls-send-grace-period-notification" class="wfls-btn wfls-btn-sm wfls-btn-default<?php echo (\WordfenceLS\Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_REQUIRE_2FA_ADMIN) && \WordfenceLS\Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED) && \WordfenceLS\Controller_Time::time() < \WordfenceLS\Controller_Settings::shared()->get_int(\WordfenceLS\Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD)) ? '' : ' wfls-disabled'; ?>"><?php _e('Send Notification', 'wordfence-2fa'); ?></a></div>
    5756            </li>
     57        </ul>
     58    </li>
     59    <li>
     60        <ul class="wfls-option wfls-padding-no-top">
     61            <li class="wfls-option-spacer"></li>
     62            <li class="wfls-option-spacer"></li>
     63            <li><a href="#" id="wfls-send-grace-period-notification" class="wfls-btn wfls-btn-sm wfls-btn-default<?php echo (\WordfenceLS\Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_REQUIRE_2FA_ADMIN) && \WordfenceLS\Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED) && \WordfenceLS\Controller_Time::time() < \WordfenceLS\Controller_Settings::shared()->get_int(\WordfenceLS\Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD)) ? '' : ' wfls-disabled'; ?>"><?php _e('Send Notification', 'wordfence-2fa'); ?></a></li>
    5864        </ul>
    5965    </li>
  • wordfence/tags/7.3.5/modules/login-security/views/settings/options.php

    r2087795 r2124102  
    1010        </div>
    1111        <div class="wfls-block-header-action wfls-block-header-action-text wfls-nowrap wfls-padding-add-right-responsive">
    12             <a href="#" id="wfls-cancel-changes" class="wfls-btn wfls-btn-sm wfls-btn-default wfls-disabled"><?php _e('Cancel Changes', 'wordfence-2fa'); ?></a>&nbsp;&nbsp;<a href="#" id="wfls-save-changes" class="wfls-btn wfls-btn-sm wfls-btn-primary wfls-disabled"><?php _e('Save Changes', 'wordfence-2fa'); ?></a>
     12            <a href="#" id="wfls-cancel-changes" class="wfls-btn wfls-btn-sm wfls-btn-default wfls-disabled"><?php _e('Cancel<span class="wfls-visible-sm-inline"> Changes</span>', 'wordfence-2fa'); ?></a>&nbsp;&nbsp;<a href="#" id="wfls-save-changes" class="wfls-btn wfls-btn-sm wfls-btn-primary wfls-disabled"><?php _e('Save<span class="wfls-visible-sm-inline"> Changes</span>', 'wordfence-2fa'); ?></a>
    1313        </div>
    1414    </div>
     
    114114                ?>
    115115            </li>
     116            <li>
     117                <?php
     118                echo \WordfenceLS\Model_View::create('options/option-captcha-threshold', array(
     119                ))->render();
     120                ?>
     121            </li>
     122            <li>
     123                <?php
     124                echo \WordfenceLS\Model_View::create('options/option-toggled', array(
     125                    'optionName' => \WordfenceLS\Controller_Settings::OPTION_CAPTCHA_TEST_MODE,
     126                    'enabledValue' => '1',
     127                    'disabledValue' => '0',
     128                    'value' => \WordfenceLS\Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_CAPTCHA_TEST_MODE) ? '1': '0',
     129                    'title' => new \WordfenceLS\Text\Model_HTML('<strong>' . __('Run reCAPTCHA in test mode', 'wordfence-2fa') . '</strong>'),
     130                    'subtitle' => __('While in test mode, reCAPTCHA will score login and registration requests but not actually block them. The scores will be recorded and can be used to select a human/bot threshold value.', 'wordfence-2fa'),
     131                ))->render();
     132                ?>
     133            </li>
    116134            <?php if (!WORDFENCE_LS_FROM_CORE): ?>
    117135            <li>
     
    121139            </li>
    122140            <?php endif; ?>
     141            <li>
     142                <?php
     143                echo \WordfenceLS\Model_View::create('options/option-toggled', array(
     144                    'optionName' => \WordfenceLS\Controller_Settings::OPTION_DELETE_ON_DEACTIVATION,
     145                    'enabledValue' => '1',
     146                    'disabledValue' => '0',
     147                    'value' => \WordfenceLS\Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_DELETE_ON_DEACTIVATION) ? '1': '0',
     148                    'title' => new \WordfenceLS\Text\Model_HTML('<strong>' . __('Delete Login Security tables and data on deactivation', 'wordfence-2fa') . '</strong>'),
     149                    'subtitle' => __('If enabled, all settings and 2FA records will be deleted on deactivation. If later reactivated, all users that previously had 2FA active will need to set it up again.', 'wordfence-2fa'),
     150                ))->render();
     151                ?>
     152            </li>
    123153        </ul>
    124154    </div>
  • wordfence/tags/7.3.5/modules/login-security/wordfence-login-security.php

    r2107617 r2124102  
    2727    define('WORDFENCE_LS_FROM_CORE', ($wfCoreActive && isset($wfCoreLoading) && $wfCoreLoading));
    2828   
    29     define('WORDFENCE_LS_VERSION', '1.0.2');
    30     define('WORDFENCE_LS_BUILD_NUMBER', '1560795818');
     29    define('WORDFENCE_LS_VERSION', '1.0.3');
     30    define('WORDFENCE_LS_BUILD_NUMBER', '1563297204');
     31   
     32    if (!defined('WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES')) { define('WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES', 15); }
    3133   
    3234    if (!WORDFENCE_LS_FROM_CORE) {
  • wordfence/tags/7.3.5/readme.txt

    r2107642 r2124102  
    55Requires PHP: 5.3
    66Tested up to: 5.2
    7 Stable tag: 7.3.4
     7Stable tag: 7.3.5
    88
    99Secure your website with the most comprehensive WordPress security plugin. Firewall, malware scan, blocking, live traffic, login security & more.
     
    185185
    186186== Changelog ==
     187
     188= 7.3.5 - July 16, 2019 =
     189* Improvement: Improved tagging of the login endpoint for brute force protection.
     190* Improvement: Added additional information about reCAPTCHA to its setting control.
     191* Improvement: Added a constant that may be overridden to customize the expiration time of login verification email links.
     192* Improvement: reCAPTCHA keys are now tested on saving to prevent accidentally inputting a v2 key.
     193* Improvement: Added a setting to control the reCAPTCHA human/bot threshold.
     194* Improvement: Added a separate option to trigger removal of Login Security tables and data on deactivation.
     195* Improvement: Reworked the reCAPTCHA implementation to trigger the token check on login/registration form submission to avoid the token expiring.
     196* Fix: Widened the reCAPTCHA key fields to allow the full keys to be visible.
     197* Fix: Fixed encoding of the ellipsis character when reporting malware finds.
     198* Fix: Disabling the IP blacklist once again correctly clears the block cache.
     199* Fix: Addressed an issue when outbound UDP connections are blocked where the NTP check could log an error.
     200* Fix: Added handling for reCAPTCHA's JavaScript failing to load, which previously blocked logging in.
     201* Fix: Fixed the functionality of the button to send 2FA grace period notifications.
     202* Fix: Fixed a missing icon for some help links when running in standalone mode.
    187203
    188204= 7.3.4 - June 17, 2019 =
  • wordfence/tags/7.3.5/views/dashboard/options-group-general.php

    r2057777 r2124102  
    131131                            'value' => wfConfig::get('deleteTablesOnDeact') ? 1 : 0,
    132132                            'title' => __('Delete Wordfence tables and data on deactivation', 'wordfence'),
     133                            'subtitle' => __('Note: This does not include Login Security settings and tables. An option to delete those must be selected separately on the Login Security settings page.', 'wordfence'),
    133134                            'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_DASHBOARD_OPTION_DELETE_DEACTIVATION),
    134135                        ))->render();
  • wordfence/tags/7.3.5/wordfence.php

    r2107617 r2124102  
    55Description: Wordfence Security - Anti-virus, Firewall and Malware Scan
    66Author: Wordfence
    7 Version: 7.3.4
     7Version: 7.3.5
    88Author URI: http://www.wordfence.com/
    99Network: true
     
    1616    exit;
    1717}
    18 define('WORDFENCE_VERSION', '7.3.4');
    19 define('WORDFENCE_BUILD_NUMBER', '1560795818');
     18define('WORDFENCE_VERSION', '7.3.5');
     19define('WORDFENCE_BUILD_NUMBER', '1563297204');
    2020define('WORDFENCE_BASENAME', function_exists('plugin_basename') ? plugin_basename(__FILE__) :
    2121    basename(dirname(__FILE__)) . '/' . basename(__FILE__));
  • wordfence/trunk/images/wf-horizontal.svg

    r1928218 r2124102  
    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE svg  PUBLIC '-//W3C//DTD SVG 1.1//EN'  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
    3 <svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.4142" version="1.1" viewBox="0 0 2230 399" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero"><path d="m764.54 369.3l4.3-1.8c1.4 3.8 3.3 6.6 5.5 8.4 2.3 1.8 5 2.7 8.3 2.7 3.4 0 6.1-0.9 8.1-2.8 2.1-1.9 3.1-4.4 3.1-7.5 0-2.5-0.7-4.5-2-6.1s-3.6-3.1-6.8-4.4c-1.8-0.7-4.1-1.5-7-2.5s-4.8-1.7-5.6-2.2c-2.6-1.5-4.4-3.1-5.5-4.8s-1.6-3.8-1.6-6.2c0-4.4 1.4-7.9 4.1-10.5 2.7-2.5 6.5-3.8 11.2-3.8 4.2 0 7.7 1 10.5 3.1 2.7 2.1 4.8 5.3 6.3 9.6l-4.2 1.3c-1.3-3.3-3-5.8-5.1-7.4s-4.6-2.4-7.7-2.4c-3 0-5.4 0.9-7.2 2.6s-2.8 3.9-2.8 6.7c0 2.1 0.6 3.8 1.8 5.2s3 2.6 5.5 3.5c1 0.4 2.4 0.9 4.2 1.5 5.2 1.8 8.6 3.2 10.1 4.2 2.4 1.6 4.2 3.3 5.3 5.2s1.6 4.1 1.6 6.7c0 4.7-1.5 8.4-4.4 11.2-3 2.8-6.9 4.1-12 4.1-4.5 0-8.2-1.1-11.2-3.3-2.7-2.2-5.1-5.6-6.8-10.3z" fill="#2d2d2d"/><path d="m839.04 370.9l3.4 1.8c-1.7 3.5-3.7 6-6 7.6s-5.1 2.4-8.5 2.4c-4.8 0-8.6-1.8-11.5-5.3-2.8-3.6-4.3-8.3-4.3-14.4 0-6.2 1.4-11.2 4.2-14.9s6.6-5.5 11.4-5.5c4.7 0 8.3 1.6 10.7 4.8 2.5 3.2 3.7 7.8 3.7 13.9v1.2h-25.5c0 5.3 1 9.3 3 12.1s4.8 4.2 8.5 4.2c2.4 0 4.5-0.6 6.2-1.9 1.8-1 3.3-3.1 4.7-6zm-1.1-11.6c-0.1-4.1-1-7.2-2.8-9.5-1.8-2.2-4.2-3.4-7.3-3.4s-5.6 1.1-7.6 3.4-3.1 5.4-3.5 9.5h21.2z" fill="#2d2d2d"/><path d="m880.74 370.9l3.5 1.9c-1.7 3.5-3.6 6-5.8 7.5-2.2 1.6-4.8 2.3-8 2.3-4.8 0-8.7-1.8-11.5-5.3s-4.2-8.3-4.2-14.4c0-6.2 1.4-11.2 4.2-14.9s6.5-5.5 11.1-5.5c3.3 0 6.2 0.9 8.5 2.6s4.1 4.3 5.5 7.8l-4 1.6c-1-2.8-2.4-4.8-4-6.1s-3.6-2-5.9-2c-3.4 0-6 1.4-7.9 4.3-1.9 2.8-2.8 6.8-2.8 11.9 0 5.3 1 9.3 2.9 12.2 1.9 2.8 4.7 4.3 8.2 4.3 2.3 0 4.3-0.6 5.9-1.9 1.4-1.3 2.9-3.4 4.3-6.3z" fill="#2d2d2d"/><path d="m927.84 343.4v38.6h-4.6v-6.1c-2.3 2.2-4.5 3.9-6.7 5s-4.4 1.7-6.6 1.7c-3.5 0-6.1-1-7.8-3.1s-2.6-5.2-2.6-9.3v-26.9h4.6v25.3c0 3.8 0.5 6.4 1.6 7.9 1.1 1.4 2.9 2.2 5.6 2.2 1.9 0 3.9-0.6 5.9-1.8s4.1-3 6.1-5.4v-28.1h4.5z" fill="#2d2d2d"/><path d="m947.64 382.1v-38.6h4.6v6.7h0.4c1.3-2.6 2.9-4.4 4.6-5.6 1.8-1.2 3.9-1.8 6.4-1.8h0.2v4.4h-0.6c-2.7 0-5 0.9-6.8 2.5-1.8 1.7-3.2 4.3-4.3 7.9v24.5h-4.5z" fill="#2d2d2d"/><path d="m977.64 335.3v-6.5h5.5v6.5h-5.5zm0.5 46.8v-38.6h4.6v38.6h-4.6z" fill="#2d2d2d"/><path d="m1002.8 382.1v-38.6h4.6v6.1c2.3-2.2 4.5-3.9 6.7-5.1 2.2-1.1 4.4-1.7 6.6-1.7 3.5 0 6.1 1 7.8 3.1s2.6 5.2 2.6 9.3v26.9h-4.6v-25.2c0-3.9-0.5-6.5-1.6-7.9s-2.9-2.1-5.6-2.1c-1.9 0-3.9 0.6-5.9 1.8s-4 3-6.1 5.4v28.1h-4.5v-0.1z" fill="#2d2d2d"/><path d="m1052.8 366.9v-0.4c-1.6-1.4-2.7-3-3.5-4.7s-1.1-3.6-1.1-5.7c0-3.9 1.3-7.1 3.9-9.7s5.9-3.9 9.9-3.9c1.8 0 3.5 0.3 5 0.7 1.5 0.5 2.9 1.2 4.3 2.2 1.2-1.2 2.4-2 3.7-2.6s2.6-0.9 4.1-0.9v4.3h-0.9c-1 0-1.9 0.1-2.7 0.3s-1.5 0.6-2.1 1.1c0.8 1.2 1.4 2.5 1.8 3.8s0.6 2.7 0.6 4.2c0 4.2-1.2 7.5-3.7 10.1s-5.7 3.9-9.6 3.9c-0.9 0-1.9-0.1-2.8-0.2-1-0.2-2-0.4-3-0.8-1.4 0.4-2.5 0.8-3.2 1.4-0.8 0.6-1.1 1.3-1.1 2 0 1.7 3.2 2.8 9.5 3.1 2 0.1 3.5 0.2 4.7 0.3 4.2 0.3 7.3 1.3 9.5 2.9 2.2 1.7 3.3 4 3.3 6.9 0 3.5-1.4 6.2-4.3 8.1-2.9 1.8-7.1 2.8-12.5 2.8-5 0-8.9-0.9-11.8-2.6-2.8-1.7-4.2-4-4.2-7.1 0-1.6 0.5-3 1.4-4.2s2.4-2.4 4.3-3.5v-0.8c-1.3-0.4-2.3-1-3-1.8-0.7-0.9-1.1-1.9-1.1-3s0.4-2.2 1.2-3.2c0.6-0.9 1.8-1.9 3.4-3zm4.4 12.3c-2.2 1-3.8 2-4.9 3.2s-1.6 2.5-1.6 3.9c0 2 1 3.6 3.2 4.7 2.1 1.1 5 1.7 8.8 1.7 3.9 0 7-0.6 9.2-1.9s3.3-3 3.3-5.2c0-2.3-1.3-4-3.9-5-2.8-0.9-7.4-1.4-14.1-1.4zm-4.7-23.1c0 2.8 0.9 5.2 2.8 7.2s4.1 3 6.7 3c2.7 0 5-1 6.8-2.9s2.7-4.3 2.7-7.3c0-2.9-0.9-5.3-2.7-7.2s-4-2.8-6.8-2.8c-2.6 0-4.9 1-6.7 2.9-1.9 2-2.8 4.3-2.8 7.1z" fill="#2d2d2d"/><path d="m1131 381.9l-13.4-38.4h4.6l11.4 32.9 11.3-32.9h4.4l-14.5 41.7c-1.4 4-3 6.9-4.9 8.5s-4.4 2.4-7.5 2.4c-0.7 0-1.4 0-2-0.1-0.7 0-1.3-0.1-2-0.2v-3.7c0.5 0.1 1.1 0.2 1.6 0.3 0.5 0 1.1 0.1 1.6 0.1 2.7 0 4.8-0.8 6.2-2.4 1.4-1.8 2.5-4.5 3.2-8.2z" fill="#2d2d2d"/><path d="m1160.3 362.7c0-6.1 1.4-11 4.3-14.5 2.9-3.6 6.7-5.4 11.5-5.4s8.6 1.8 11.5 5.4 4.3 8.4 4.3 14.5-1.4 11-4.3 14.6-6.7 5.4-11.5 5.4-8.6-1.8-11.5-5.4c-2.8-3.6-4.3-8.5-4.3-14.6zm4.6 0c0 5.1 1 9.1 2.9 12 2 2.9 4.7 4.3 8.3 4.3 3.5 0 6.2-1.4 8.2-4.3 2-2.8 2.9-6.8 2.9-12 0-5.1-1-9.1-2.9-11.9-2-2.8-4.7-4.2-8.2-4.2s-6.3 1.4-8.3 4.3c-1.9 2.7-2.9 6.7-2.9 11.8z" fill="#2d2d2d"/><path d="m1236.2 343.4v38.6h-4.6v-6.1c-2.3 2.2-4.5 3.9-6.7 5s-4.4 1.7-6.6 1.7c-3.5 0-6.1-1-7.8-3.1-1.8-2.1-2.6-5.2-2.6-9.3v-26.9h4.6v25.3c0 3.8 0.5 6.4 1.6 7.9 1.1 1.4 2.9 2.2 5.5 2.2 1.9 0 3.9-0.6 6-1.8 2-1.2 4.1-3 6.1-5.4v-28.1h4.5z" fill="#2d2d2d"/><path d="m1256 382.1v-38.6h4.6v6.7h0.4c1.3-2.6 2.9-4.4 4.6-5.6 1.8-1.2 3.9-1.8 6.4-1.8h0.2v4.4h-0.6c-2.7 0-5 0.9-6.8 2.5-1.8 1.7-3.2 4.3-4.3 7.9v24.5h-4.5z" fill="#2d2d2d"/><path d="m1324.1 382.1l-13.8-53.7h9.9l7.7 30.9c0.3 1.2 0.6 2.8 1 4.9s0.8 4.4 1.1 7.1c0.2-2.7 0.8-6.1 1.8-10.2 0.2-0.7 0.3-1.2 0.4-1.5l7.8-31.2h8.7l7.4 30.9c0.3 1.2 0.6 2.8 1 4.9s0.8 4.5 1.2 7.2c0.1-1.7 0.4-3.6 0.7-5.5s0.8-4 1.3-6.2l7.8-31.2h9.9l-13.8 53.7h-11.2l-6.7-26.9c-0.6-2.5-1.1-4.7-1.4-6.6-0.4-1.9-0.6-3.7-0.8-5.4-0.3 2.5-0.7 4.7-1 6.7-0.4 2-0.7 3.7-1 5.1l-6.9 27h-11.1z" fill="#00719e"/><path d="m1385.4 362.7c0-6.3 1.5-11.2 4.4-14.8s7-5.3 12.2-5.3 9.3 1.8 12.2 5.3 4.4 8.5 4.4 14.8-1.5 11.2-4.4 14.8c-2.9 3.5-7 5.3-12.2 5.3s-9.2-1.8-12.2-5.4c-2.9-3.5-4.4-8.4-4.4-14.7zm9.3 0c0 4.1 0.6 7.2 1.8 9.2s3 3 5.5 3 4.3-1 5.5-3 1.8-5.1 1.8-9.2-0.6-7.2-1.8-9.2-3-3-5.5-3c-2.4 0-4.3 1-5.5 3-1.2 2.1-1.8 5.1-1.8 9.2z" fill="#00719e"/><path d="m1432.9 382.1v-38.7h8.7v6.4c1.3-2.3 2.7-4.1 4.3-5.3s3.4-1.8 5.3-1.8h0.7c0.2 0 0.3 0.1 0.4 0.1v9.5h-0.4c-2.1 0-3.9 0.5-5.6 1.6-1.7 1-3.1 2.5-4.2 4.5v23.7h-9.2z" fill="#00719e"/><path d="m1488.7 377.9c-1.4 1.7-2.9 2.9-4.6 3.7s-3.6 1.2-5.8 1.2c-4.4 0-8.1-1.9-10.9-5.6s-4.2-8.6-4.2-14.5c0-6 1.4-10.8 4.1-14.5s6.3-5.6 10.7-5.6c1.9 0 3.7 0.4 5.2 1 1.5 0.7 2.9 1.8 4.3 3.4v-18.7h8.9v44.7c0 0.9 0 2.2 0.1 3.7s0.2 3.3 0.3 5.3h-7.1l-1-4.1zm-1.3-6.1v-18.4c-1.3-1.2-2.5-2-3.5-2.5-1.1-0.5-2.2-0.8-3.3-0.8-2.6 0-4.6 1.1-6 3.3s-2.2 5.3-2.2 9.2c0 4 0.7 7 2.2 9.2 1.4 2.2 3.5 3.2 6.1 3.2 1.2 0 2.3-0.2 3.4-0.8 0.9-0.4 2-1.2 3.3-2.4z" fill="#00719e"/><path d="m1514.6 382.1v-53.7h19.2c6.3 0 11 1.3 14.1 4 3.1 2.6 4.6 6.6 4.6 12 0 5.2-1.5 9.2-4.5 12-3 2.7-7.5 4.1-13.3 4.1h-10v21.7h-10.1v-0.1zm10.2-30.3h7.5c3.7 0 6.3-0.6 7.9-1.7 1.5-1.2 2.3-3.1 2.3-5.8s-0.8-4.7-2.3-5.8c-1.5-1.2-4.1-1.7-7.9-1.7h-7.5v15z" fill="#00719e"/><path d="m1566.4 382.1v-38.7h8.7v6.4c1.3-2.3 2.7-4.1 4.3-5.3s3.4-1.8 5.3-1.8h0.7c0.2 0 0.3 0.1 0.4 0.1v9.5h-0.4c-2.1 0-3.9 0.5-5.6 1.6-1.7 1-3.1 2.5-4.2 4.5v23.7h-9.2z" fill="#00719e"/><path d="m1628.3 374.5c-1.5 2.7-3.5 4.8-6.1 6.2s-5.7 2.1-9.3 2.1c-5.2 0-9.2-1.8-12.1-5.3s-4.3-8.4-4.3-14.8c0-6.3 1.4-11.3 4.3-14.8 2.9-3.6 6.9-5.3 12-5.3s9 1.7 11.8 5.2c2.8 3.4 4.2 8.3 4.2 14.5v2h-23.2c0.1 3.7 0.8 6.4 2.1 8.2 1.4 1.8 3.4 2.8 6.1 2.8 1.7 0 3.1-0.4 4.4-1.2 1.2-0.8 2.4-2.1 3.5-3.8l6.6 4.2zm-22.7-16.8h14.2c0-2.6-0.6-4.6-1.9-6s-3-2.2-5.2-2.2c-2.1 0-3.7 0.7-5 2.1-1.2 1.5-1.9 3.5-2.1 6.1z" fill="#00719e"/><path d="m1639.9 375l6.2-4.9c1.5 1.9 2.9 3.3 4.4 4.2 1.4 0.9 2.9 1.4 4.5 1.4s3-0.4 3.9-1.1c1-0.8 1.4-1.8 1.4-3.1 0-1.9-2-3.7-6.1-5.2-0.4-0.2-0.8-0.3-1-0.4-4.8-1.8-8.1-3.6-9.7-5.3s-2.4-3.9-2.4-6.6c0-3.3 1.2-6 3.7-8.2 2.5-2.1 5.7-3.2 9.6-3.2 2.6 0 5 0.5 7.2 1.4 2.1 1 4.1 2.5 5.9 4.5l-5.8 5c-1.2-1.3-2.5-2.3-3.7-2.9s-2.5-0.9-3.8-0.9c-1.5 0-2.7 0.3-3.6 1s-1.3 1.6-1.3 2.8c0 1.4 2 2.9 6.1 4.4 1.1 0.4 1.9 0.7 2.6 1 4.1 1.6 6.9 3.3 8.4 5 1.5 1.8 2.2 4.1 2.2 7.1 0 3.6-1.2 6.5-3.7 8.6-2.5 2.2-5.7 3.3-9.8 3.3-3.2 0-6-0.6-8.4-1.9-2.5-1.3-4.8-3.2-6.8-6z" fill="#00719e"/><path d="m1679.8 375l6.2-4.9c1.5 1.9 2.9 3.3 4.4 4.2 1.4 0.9 3 1.4 4.5 1.4 1.7 0 3-0.4 3.9-1.1 1-0.8 1.4-1.8 1.4-3.1 0-1.9-2-3.7-6.1-5.2-0.4-0.2-0.8-0.3-1-0.4-4.8-1.8-8.1-3.6-9.7-5.3s-2.4-3.9-2.4-6.6c0-3.3 1.2-6 3.7-8.2 2.5-2.1 5.7-3.2 9.6-3.2 2.6 0 5 0.5 7.2 1.4 2.1 1 4.1 2.5 5.9 4.5l-5.8 5c-1.2-1.3-2.5-2.3-3.7-2.9s-2.5-0.9-3.8-0.9c-1.5 0-2.7 0.3-3.6 1s-1.3 1.6-1.3 2.8c0 1.4 2 2.9 6.1 4.4 1.1 0.4 1.9 0.7 2.6 1 4.1 1.6 6.9 3.3 8.4 5 1.5 1.8 2.2 4.1 2.2 7.1 0 3.6-1.2 6.5-3.7 8.6-2.5 2.2-5.7 3.3-9.8 3.3-3.2 0-6-0.6-8.4-1.9-2.5-1.3-4.8-3.2-6.8-6z" fill="#00719e"/><path d="m1760.3 382.1l-11.3-38.6h4.5l9.3 31.5 9.3-31.5h4.1l9.3 32 9.2-32h4.4l-11.3 38.6h-4.4l-9.2-31-9.4 31h-4.5z" fill="#2d2d2d"/><path d="m1838 370.9l3.4 1.8c-1.7 3.5-3.7 6-6 7.6s-5.2 2.4-8.5 2.4c-4.8 0-8.6-1.8-11.5-5.3-2.8-3.6-4.3-8.3-4.3-14.4 0-6.2 1.4-11.2 4.2-14.9s6.6-5.5 11.3-5.5 8.3 1.6 10.8 4.8 3.7 7.8 3.7 13.9v1.2h-25.5c0 5.3 1 9.3 3 12.1s4.8 4.2 8.5 4.2c2.5 0 4.5-0.6 6.2-1.9 1.8-1 3.3-3.1 4.7-6zm-1.1-11.6c-0.1-4.1-1-7.2-2.8-9.5-1.8-2.2-4.2-3.4-7.3-3.4s-5.6 1.1-7.6 3.4-3.1 5.4-3.5 9.5h21.2z" fill="#2d2d2d"/><path d="m1856.8 382.1c0.1-0.6 0.2-1.3 0.2-2s0.1-1.9 0.1-3.6v-47.7h4.6v19.7h0.4c1.8-1.9 3.6-3.4 5.5-4.3s3.9-1.4 6.1-1.4c4.2 0 7.5 1.8 10 5.4s3.8 8.4 3.8 14.5-1.3 11-3.8 14.6-5.9 5.4-10 5.4c-2.2 0-4.2-0.5-6.1-1.4s-3.7-2.3-5.5-4.3h-0.4l-1.2 5h-3.7v0.1zm4.9-10.4c1.9 2.5 3.8 4.4 5.6 5.5s3.7 1.7 5.7 1.7c3.2 0 5.6-1.4 7.3-4.2s2.6-6.8 2.6-12-0.9-9.2-2.6-12-4.2-4.3-7.3-4.3c-1.9 0-3.8 0.6-5.6 1.8s-3.7 3-5.6 5.5v18h-0.1z" fill="#2d2d2d"/><path d="m1902.5 372.4c1.7 2.2 3.5 3.9 5.5 5 1.9 1.1 4 1.7 6.2 1.7 2.4 0 4.3-0.7 5.8-2s2.2-3 2.2-5.1c0-2.9-2.9-5.5-8.8-7.6-0.5-0.2-0.9-0.3-1.1-0.4-4.8-1.8-8-3.4-9.6-5-1.5-1.5-2.3-3.6-2.3-6 0-3 1.1-5.5 3.4-7.4s5.3-2.9 9-2.9c2.5 0 4.9 0.6 7 1.8 2.2 1.2 4.1 3 5.8 5.3l-3.2 2.4c-1.5-2-3.1-3.5-4.8-4.4s-3.5-1.4-5.7-1.4c-2.1 0-3.7 0.6-5 1.8-1.3 1.1-1.9 2.7-1.9 4.6 0 2.5 2.8 4.8 8.4 6.9 0.8 0.3 1.4 0.5 1.8 0.7 4.6 1.7 7.7 3.4 9.2 5 1.6 1.6 2.3 3.7 2.3 6.3 0 3.3-1.2 5.9-3.6 8s-5.6 3.1-9.5 3.1c-3 0-5.7-0.6-8.1-1.9-2.4-1.2-4.5-3.1-6.5-5.8l3.5-2.7z" fill="#2d2d2d"/><path d="m1942.8 335.3v-6.5h5.6v6.5h-5.6zm0.5 46.8v-38.6h4.6v38.6h-4.6z" fill="#2d2d2d"/><path d="m1973.3 374.8c0 1.5 0.3 2.6 1 3.3s1.7 1.1 3.2 1.1c0.5 0 1 0 1.6-0.1s1.4-0.3 2.5-0.6v3.7c-1 0.3-1.9 0.4-2.7 0.6-0.9 0.1-1.7 0.2-2.5 0.2-2.6 0-4.6-0.7-5.8-2s-1.9-3.4-1.9-6.3v-27.4h-5.7v-3.7h5.7v-11.5h4.6v11.5h8.1v3.7h-8.1v27.5z" fill="#2d2d2d"/><path d="m2019.1 370.9l3.4 1.8c-1.7 3.5-3.7 6-6 7.6s-5.1 2.4-8.5 2.4c-4.8 0-8.6-1.8-11.5-5.3-2.8-3.6-4.3-8.3-4.3-14.4 0-6.2 1.4-11.2 4.2-14.9s6.6-5.5 11.3-5.5 8.3 1.6 10.8 4.8 3.7 7.8 3.7 13.9v1.2h-25.5c0 5.3 1 9.3 3 12.1s4.8 4.2 8.5 4.2c2.5 0 4.5-0.6 6.2-1.9 1.7-1 3.3-3.1 4.7-6zm-1.2-11.6c-0.1-4.1-1-7.2-2.8-9.5-1.8-2.2-4.2-3.4-7.3-3.4s-5.6 1.1-7.6 3.4-3.1 5.4-3.5 9.5h21.2z" fill="#2d2d2d"/><path d="m1440.3 254.3v34.2h-92.2v-34.2h21.5v-80.1h-19.9v-34.2h19.9v-13.7c0-15.6 4.8-28.7 14.5-39.2s24-15.7 43.2-15.7c23.2 0 39.7 7 49.5 20.9l-34.4 26.8c-3.1-10.6-7.5-16-13.2-16-8.2 0-12.3 6.9-12.3 20.6v16.3h23.3v34.2h-23.3v80.1h23.4zm140-10.6l36.8 11.8c-15.4 24.2-39.6 36.3-72.4 36.3-26.2 0-46.6-6.9-61.3-20.7s-22-32-22-54.5c0-22.9 7.6-42 22.7-57.4 15.1-15.3 34.4-23 57.8-23 17 0 31.7 4.3 44 12.9 12.4 8.6 21 19.3 25.8 32.1s7.2 27 7.2 42.8h-110.6c0.7 13.5 5 23.1 12.8 28.7s16.1 8.4 24.8 8.4c11.4 0.1 22.9-5.8 34.4-17.4zm-9-46c-1.1-8.3-4.3-15.3-9.7-21.2-5.4-5.8-12.7-8.7-22-8.7-17.4 0-27.5 10-30.4 29.9h62.1zm69.5-23.5v-34.2h70.1v13.8c14.3-10.7 28.8-16.1 43.6-16.1 30 0 44.9 19.1 44.9 57.4v59.2h22.4v34.2h-69.8v-89.9c0-8.1-1.1-13.6-3.3-16.6s-5.8-4.4-10.8-4.4c-8.8 0-17.8 3.2-27 9.7v67h22.8v34.2h-92.9v-34.2h22.7v-80.1h-22.7zm349.7-34.2v60.3h-33.7c-7.7-16.6-19.7-24.8-36-24.8-10.4 0-18.7 3.5-24.9 10.4s-9.3 16.1-9.3 27.7c0 14 3.3 24.4 9.8 31.1s14.6 10 24.1 10c7.6 0 14.7-2.2 21.5-6.5 6.7-4.3 12.2-10.1 16.3-17.3l36.8 16.2c-13.7 29.9-37.7 44.9-72.1 44.9-25.9 0-46.5-7.1-61.9-21.2s-23.1-33-23.1-56.6 7.5-42.3 22.6-55.9c15.1-13.7 32.6-20.5 52.7-20.5 16.1 0 31 4.9 44.9 14.6v-12.3h32.3v-0.1zm143.1 103.7l36.8 11.8c-15.4 24.2-39.6 36.3-72.4 36.3-26.2 0-46.6-6.9-61.3-20.7s-22-32-22-54.5c0-22.9 7.6-42 22.7-57.4 15.1-15.3 34.4-23 57.8-23 17 0 31.7 4.3 44 12.9 12.4 8.6 21 19.3 25.8 32.1s7.2 27 7.2 42.8h-110.6c0.7 13.5 5 23.1 12.8 28.7s16.1 8.4 24.8 8.4c11.4 0.1 22.8-5.8 34.4-17.4zm-9-46c-1.1-8.3-4.3-15.3-9.7-21.2-5.4-5.8-12.7-8.7-22-8.7-17.4 0-27.5 10-30.4 29.9h62.1z" fill="#2d2d2d"/><path d="m639.74 289.8l-60.9-178.7h-22.5v-36h96.2v36h-22.1l34.7 102.5 32.5-102.5h-19.3v-36h76.7v36h-19.8l35 102.5 33.6-102.5h-21.3v-36h85.4v36h-23.2l-58.9 178.7h-39.9l-33.6-97.4-31.8 97.4h-40.8zm286.5 2c-21.9 0-40.4-6.9-55.4-20.8-15.1-13.9-22.6-32.8-22.6-57 0-24.1 7.5-43.1 22.6-57s33.6-20.8 55.4-20.8c22 0 40.5 6.9 55.5 20.8s22.5 32.9 22.5 57c0 23.8-7.4 42.7-22.3 56.8-14.8 14-33.4 21-55.7 21zm-0.1-36.8c8.8 0 15.9-3.4 21.4-10.1s8.2-17.3 8.2-31.8c0-12.7-2.7-22.6-8-29.7s-12.5-10.7-21.6-10.7c-19.5 0-29.3 14.1-29.3 42.3 0 11.6 2.4 21.1 7.3 28.6 4.8 7.7 12.2 11.4 22 11.4zm203.1-0.7v34.2h-104.5v-34.2h27.4v-80.1h-25.8v-34.2h69.2v37.7c2.7-10.8 8.7-20.2 18.2-28.1s20.6-11.9 33.5-11.9c2.1 0 4.7 0.1 7.7 0.2v44.8c-12 0-21.7 1.3-29.3 4s-13.8 8.5-18.7 17.5-7.4 19.6-7.4 31.9v18.2h29.7zm218.7 0v34.2h-71.8v-17.7c-13.2 13.2-27.5 19.8-42.9 19.8-18.5 0-33.9-7.5-46-22.5-12.2-15-18.3-33.2-18.3-54.6 0-21.7 6.2-40 18.7-54.8 12.5-14.9 27.7-22.3 45.7-22.3 17.3 0 31.5 6.7 42.8 20.2v-47.3h-23.2v-34.2h70.6v179.2h24.4zm-71.3-40.4c0-14.2-3.1-24.3-9.1-30.4-6.1-6-13-9.1-20.8-9.1-9.3 0-16.5 3.6-21.6 10.8s-7.6 16.7-7.6 28.5c0 11.1 2.5 20.5 7.5 28.1s12.3 11.4 21.8 11.4c7.9 0 14.8-3.1 20.8-9.3 6-6 9-16.1 9-30z" fill="#00719e"/></g><g fill="#2d2d2d" fill-rule="nonzero"><path d="m2179.9 165.6v-27.2h-8.6v-5.4h23.3v5.4h-8.6v27.2h-6.1z"/><path d="m2199.2 165.6v-32.6h8.8l4.7 15.8c0.4 1.4 0.8 2.8 1.1 4.2s0.5 2.7 0.7 4c0.3-1.2 0.6-2.5 0.9-3.7 0.3-1.3 0.7-2.7 1.2-4.3l4.8-15.9h8.4v32.6h-5.3v-27.4l-0.9 3.6c-0.3 1.2-0.7 2.4-1 3.6l-5.9 20.1h-4.5l-5.8-20.1c-0.6-2.1-1-3.6-1.3-4.6-0.2-1-0.5-1.8-0.6-2.6v27.3h-5.3z"/></g><clipPath id="b"><path d="m488.74 70.6c-119.9-3.9-226.9-65.2-235.4-70.2v-0.4s-111.1 66.5-236 70.6c0 0-43.5 163 7.3 327.9h456.9c50.7-164.9 7.2-327.9 7.2-327.9z"/></clipPath><g clip-path="url(#b)" fill-rule="nonzero"><path d="m24.539 398.6h228.8v-398.6s-111.1 66.5-236 70.6c-0.1 0-43.6 163 7.2 328z" fill="#00719e"/><path d="m488.74 70.6c-119.9-3.9-226.9-65.2-235.4-70.2v398.1h228.1c50.8-164.9 7.3-327.9 7.3-327.9z" fill="#008dc2"/></g><clipPath id="a"><path d="m488.74 70.6c-119.9-3.9-226.9-65.2-235.4-70.2v-0.4s-111.1 66.5-236 70.6c0 0-43.5 163 7.3 327.9h456.9c50.7-164.9 7.2-327.9 7.2-327.9z"/></clipPath><g clip-path="url(#a)" fill="#fff" fill-rule="nonzero"><path d="m537.94 363.5c-135.5-83.6-283.1-78.1-284.6-78l-0.3-6c0.4 0 38-1.6 92.1 7.4 49.8 8.2 124.3 27.3 196 71.5l-3.2 5.1z"/><path d="m543.04 338.2c-138-85.1-288.1-79.5-289.6-79.4l-0.4-9.2c1.6-0.1 39-1.6 94.3 7.5 51 8.4 127.2 28 200.6 73.2l-4.9 7.9z"/><path d="m-32.061 363.5c135.5-83.6 283.1-78.1 284.6-78l0.3-6c-0.4 0-38-1.6-92.1 7.4-49.8 8.2-124.3 27.3-196 71.5l3.2 5.1z"/><path d="m-37.161 338.2c138-85.1 288.1-79.5 289.6-79.4l0.4-9.2c-1.6-0.1-39-1.6-94.3 7.5-51 8.4-127.2 28-200.6 73.2l4.9 7.9z"/><path d="m326.14 530.9c-67.8-219.6-60.2-369.5-58.8-389.9 2.9-3.3 4.7-7.7 4.7-12.4 0-0.9-0.1-2.6-0.2-2.6h9.5l-28.1-68-27.9 68h9.3c-0.1 0-0.2 1.7-0.2 2.6 0 4.8 1.8 9.3 4.9 12.6 1.5 21.1 8.9 170.7-58.8 389.8-4.1 13.4 34.3 20.1 72.7 20.1 39.1-0.1 77-6.8 72.9-20.2z"/><path d="m181.04 163.9l-16.9-36.6-17.2 36.6h10v252h14v-252h10.1z"/><path d="m113.04 189.9l-12.8-32.8-13.3 32.8h7v223h12v-223h7.1z"/><path d="m47.939 212.9l-11.8-28.9-12.2 28.9h7v198h10v-198h7z"/><path d="m324.94 163.9l16.9-36.6 17.1 36.6h-10v252h-14v-252h-10z"/><path d="m392.94 189.9l12.8-32.8 13.2 32.8h-7v223h-12v-223h-7z"/><path d="m458.04 212.9l11.7-28.9 12.3 28.9h-7.1v198h-10v-198h-6.9z"/></g></svg>
     1<?xml version="1.0" encoding="utf-8"?>
     2<!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
     3<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     4     viewBox="0 0 2230 399" style="enable-background:new 0 0 2230 399;" xml:space="preserve">
     5<style type="text/css">
     6    .st0{fill:#00719E;}
     7    .st1{fill:#2E2E2E;}
     8    .st2{fill:#FFFFFF;}
     9    .st3{fill:#218DC1;}
     10    .st4{fill:#1A719D;}
     11    .st5{fill:#2B2C2B;}
     12</style>
     13<g>
     14    <path d="M772.6,373.8l2.6-2.9c5.8,5.3,11.1,7.8,18.8,7.8c7.9,0,13.3-4.4,13.3-10.4v-0.2c0-5.6-2.9-8.8-14.9-11.2
     15        c-12.6-2.6-17.7-6.8-17.7-14.8V342c0-7.8,7.1-13.8,16.9-13.8c7.7,0,12.7,2.1,18,6.4l-2.5,3.1c-5-4.3-9.9-5.9-15.7-5.9
     16        c-7.7,0-12.8,4.4-12.8,9.9v0.2c0,5.6,2.9,8.9,15.3,11.5c12.2,2.5,17.3,6.8,17.3,14.5v0.2c0,8.5-7.3,14.3-17.4,14.3
     17        C785.3,382.3,778.9,379.5,772.6,373.8"/>
     18    <path d="M853,360.6c-0.5-7.7-5-14.9-13.7-14.9c-7.6,0-13.4,6.4-14.1,14.9H853z M821.3,362.4v-0.2c0-11.1,7.8-20,18.2-20
     19        c10.7,0,17.6,8.7,17.6,20c0,0.7,0,0.9-0.1,1.5h-31.7c0.7,9.5,7.5,15.1,15,15.1c5.9,0,10-2.6,13.1-6l2.6,2.3
     20        c-3.9,4.2-8.5,7.2-15.8,7.2C830,382.4,821.3,374.4,821.3,362.4"/>
     21    <path d="M865.8,362.5v-0.2c0-10.7,8.6-20,19.5-20c7.2,0,11.7,3.3,15.3,7.1l-2.6,2.7c-3.3-3.4-7.1-6.3-12.8-6.3
     22        c-8.7,0-15.5,7.3-15.5,16.4v0.2c0,9.2,7,16.6,15.8,16.6c5.4,0,9.6-2.8,12.8-6.4l2.6,2.3c-3.9,4.4-8.6,7.6-15.6,7.6
     23        C874.3,382.4,865.8,373.2,865.8,362.5"/>
     24    <path d="M911.3,366.6v-23.4h3.7V366c0,7.9,4.4,13.1,12.2,13.1c7.5,0,13.3-5.7,13.3-13.7v-22.1h3.7v38.3h-3.7v-7.1
     25        c-2.6,4.5-6.8,8-13.8,8C916.9,382.4,911.3,375.8,911.3,366.6"/>
     26    <path d="M958.8,343.2h3.7v10.9c3-6.8,9.4-11.8,17-11.5v4.1h-0.4c-8.9,0-16.6,6.7-16.6,19.1v15.7h-3.7V343.2z"/>
     27    <path d="M990.1,343.2h3.7v38.3h-3.7V343.2z M989.6,328.2h4.6v5h-4.6V328.2z"/>
     28    <path d="M1009,343.2h3.7v7.1c2.6-4.5,6.8-8,13.8-8c9.7,0,15.3,6.6,15.3,15.8v23.4h-3.7v-22.7c0-7.9-4.4-13.1-12.2-13.1
     29        c-7.5,0-13.3,5.7-13.3,13.7v22.1h-3.7V343.2z"/>
     30    <path d="M1087.9,360.6v-0.2c0-8.9-7.9-14.6-15.8-14.6c-8,0-14.8,5.6-14.8,14.5v0.2c0,8.6,6.9,14.6,14.8,14.6
     31        C1080,375.1,1087.9,369.3,1087.9,360.6 M1055,387.8l2.2-3c4.6,3.5,9.8,5.4,15.5,5.4c8.8,0,15-5,15-14.9v-5.6
     32        c-3.3,4.7-8.4,8.9-16,8.9c-9.2,0-18.4-7.1-18.4-18v-0.1c0-11,9.2-18.2,18.4-18.2c7.7,0,12.8,4.1,16,8.6v-7.7h3.7v32.3
     33        c0,5.6-1.8,9.9-4.9,13c-3.3,3.3-8.3,5.1-13.9,5.1C1066.2,393.7,1060.2,391.7,1055,387.8"/>
     34    <path d="M1126.3,392.1l1.3-3.2c2,1,3.7,1.4,6.5,1.4c4,0,6.6-2.3,9.5-9l-18.4-38.1h4.3l15.9,34.2l13.8-34.2h4.1l-16.6,39.6
     35        c-3.4,8-7.3,10.9-12.8,10.9C1131,393.7,1128.9,393.2,1126.3,392.1"/>
     36    <path d="M1204.6,362.5v-0.2c0-9.2-6.9-16.6-15.8-16.6c-9.1,0-15.6,7.4-15.6,16.4v0.2c0,9.2,6.9,16.6,15.8,16.6
     37        C1198.1,379,1204.6,371.5,1204.6,362.5 M1169.3,362.5v-0.2c0-10.7,8.3-20,19.7-20c11.3,0,19.6,9.2,19.6,19.9v0.2
     38        c0,10.7-8.3,20-19.7,20C1177.5,382.4,1169.3,373.2,1169.3,362.5"/>
     39    <path d="M1219.9,366.6v-23.4h3.7V366c0,7.9,4.4,13.1,12.2,13.1c7.5,0,13.3-5.7,13.3-13.7v-22.1h3.7v38.3h-3.7v-7.1
     40        c-2.6,4.5-6.8,8-13.8,8C1225.5,382.4,1219.9,375.8,1219.9,366.6"/>
     41    <path d="M1267.4,343.2h3.7v10.9c3-6.8,9.4-11.8,17-11.5v4.1h-0.4c-8.9,0-16.6,6.7-16.6,19.1v15.7h-3.7V343.2z"/>
     42    <polygon class="st0" points="1317.2,329 1327.1,329 1339.7,367.9 1352.6,328.8 1360.4,328.8 1373.3,367.9 1385.8,329 1395.5,329
     43        1377.2,381.9 1369.3,381.9 1356.3,344.1 1343.4,381.9 1335.5,381.9    "/>
     44    <path class="st0" d="M1430.8,361.9v-0.2c0-7-5-12.8-12.2-12.8c-7.3,0-11.9,5.7-11.9,12.6v0.2c0,6.9,5,12.8,12.1,12.8
     45        C1426.1,374.5,1430.8,368.7,1430.8,361.9 M1397.6,361.9v-0.2c0-11.3,9-20.7,21.2-20.7c12.2,0,21.1,9.2,21.1,20.6v0.2
     46        c0,11.3-9,20.6-21.2,20.6C1406.5,382.4,1397.6,373.2,1397.6,361.9"/>
     47    <path class="st0" d="M1449.8,341.9h9.1v8.9c2.5-5.9,7.1-10,14-9.7v9.6h-0.5c-8,0-13.5,5.2-13.5,15.7v15.1h-9.1V341.9z"/>
     48    <path class="st0" d="M1510.5,361.8v-0.2c0-7.7-5.4-12.7-11.5-12.7c-6.2,0-11.4,4.8-11.4,12.7v0.2c0,7.7,5.3,12.7,11.4,12.7
     49        C1505.1,374.4,1510.5,369.3,1510.5,361.8 M1478.4,361.8v-0.2c0-13.1,8.9-20.6,18.4-20.6c6.5,0,10.7,3.3,13.5,7v-21.3h9.1v54.8h-9.1
     50        v-6.6c-2.9,4.1-7.1,7.4-13.5,7.4C1487.5,382.3,1478.4,374.9,1478.4,361.8"/>
     51    <path class="st0" d="M1552.5,356.3c7,0,11.3-3.9,11.3-9.4v-0.1c0-6.2-4.4-9.4-11.3-9.4h-10.7v18.9H1552.5z M1532.5,329h20.7
     52        c12.2,0,20,7,20,17.6v0.2c0,11.8-9.5,17.9-21,17.9h-10.4v16.9h-9.2V329z"/>
     53    <path class="st0" d="M1582.3,341.9h9.1v8.9c2.5-5.9,7.1-10,14-9.7v9.6h-0.5c-8,0-13.5,5.2-13.5,15.7v15.1h-9.1V341.9z"/>
     54    <path class="st0" d="M1639.9,358.9c-0.6-5.9-4.1-10.4-10.1-10.4c-5.6,0-9.5,4.3-10.3,10.4H1639.9z M1610.6,361.8v-0.2
     55        c0-11.3,8-20.6,19.4-20.6c12.6,0,19,9.9,19,21.3c0,0.8-0.1,1.7-0.2,2.6h-29.1c1,6.5,5.6,10.1,11.4,10.1c4.4,0,7.6-1.7,10.7-4.7
     56        l5.3,4.7c-3.8,4.5-8.9,7.4-16.2,7.4C1619.4,382.4,1610.6,374.1,1610.6,361.8"/>
     57    <path class="st0" d="M1655.6,376.3l4.1-6.2c4.3,3.2,8.9,4.9,13,4.9c3.9,0,6.2-1.7,6.2-4.3v-0.2c0-3.1-4.2-4.1-8.9-5.6
     58        c-5.9-1.7-12.4-4.1-12.4-11.6v-0.2c0-7.5,6.2-12.1,14.1-12.1c5,0,10.4,1.7,14.6,4.5l-3.6,6.5c-3.8-2.3-7.9-3.8-11.2-3.8
     59        c-3.5,0-5.6,1.6-5.6,4v0.2c0,2.9,4.3,4.1,8.9,5.6c5.8,1.8,12.3,4.4,12.3,11.6v0.2c0,8.3-6.5,12.5-14.7,12.5
     60        C1666.8,382.3,1660.5,380.2,1655.6,376.3"/>
     61    <path class="st0" d="M1693.1,376.3l4.1-6.2c4.3,3.2,8.9,4.9,13,4.9c3.9,0,6.2-1.7,6.2-4.3v-0.2c0-3.1-4.2-4.1-8.9-5.6
     62        c-5.9-1.7-12.4-4.1-12.4-11.6v-0.2c0-7.5,6.2-12.1,14.1-12.1c5,0,10.4,1.7,14.6,4.5l-3.6,6.5c-3.8-2.3-7.9-3.8-11.2-3.8
     63        c-3.5,0-5.6,1.6-5.6,4v0.2c0,2.9,4.3,4.1,8.9,5.6c5.8,1.8,12.3,4.4,12.3,11.6v0.2c0,8.3-6.5,12.5-14.7,12.5
     64        C1704.3,382.3,1698.1,380.2,1693.1,376.3"/>
     65    <polygon points="1755.8,343.2 1760,343.2 1771.5,376.9 1783.1,343.1 1786,343.1 1797.6,376.9 1809.1,343.2 1813.1,343.2
     66        1799.1,381.8 1795.9,381.8 1784.5,349 1773,381.8 1769.9,381.8    "/>
     67    <path d="M1851.7,360.6c-0.5-7.7-5-14.9-13.7-14.9c-7.6,0-13.4,6.4-14.1,14.9H1851.7z M1820,362.4v-0.2c0-11.1,7.8-20,18.2-20
     68        c10.7,0,17.6,8.7,17.6,20c0,0.7,0,0.9-0.1,1.5h-31.7c0.7,9.5,7.5,15.1,15,15.1c5.9,0,10-2.6,13.1-6l2.6,2.3
     69        c-3.9,4.2-8.5,7.2-15.8,7.2C1828.7,382.4,1820,374.4,1820,362.4"/>
     70    <path d="M1901.3,362.5v-0.2c0-10.1-7-16.5-15-16.5c-8,0-15.6,6.7-15.6,16.4v0.2c0,9.8,7.7,16.4,15.6,16.4
     71        C1894.6,378.9,1901.3,372.8,1901.3,362.5 M1870.9,373.2v8.3h-3.7v-54.8h3.7v25.1c3.3-5,8.2-9.5,15.8-9.5c9.2,0,18.6,7.4,18.6,19.9
     72        v0.2c0,12.5-9.4,20-18.6,20C1879,382.4,1874,378.1,1870.9,373.2"/>
     73    <path d="M1914.2,376.7l2.2-2.9c4.2,3.2,8.9,5,13.7,5c5.2,0,9.2-2.9,9.2-7.3v-0.2c0-4.5-4.8-6.2-10.1-7.7
     74        c-6.2-1.8-13.1-3.7-13.1-10.5v-0.2c0-6.2,5.2-10.6,12.6-10.6c4.6,0,9.8,1.7,13.6,4.2l-2,3.1c-3.5-2.3-7.7-3.8-11.8-3.8
     75        c-5.3,0-8.7,2.9-8.7,6.7v0.2c0,4.3,5.2,5.9,10.7,7.4c6.2,1.7,12.6,4,12.6,10.7v0.2c0,6.8-5.9,11.2-13.2,11.2
     76        C1924.3,382.3,1918.2,380,1914.2,376.7"/>
     77    <path d="M1956,343.2h3.7v38.3h-3.7V343.2z M1955.6,328.2h4.6v5h-4.6V328.2z"/>
     78    <path d="M1977,371.7v-25.1h-5.6v-3.4h5.6V331h3.7v12.2h13.4v3.4h-13.4v24.7c0,5.5,3.2,7.4,7.7,7.4c1.9,0,3.5-0.4,5.6-1.4v3.5
     79        c-2,0.9-3.8,1.4-6.2,1.4C1981.8,382.2,1977,379,1977,371.7"/>
     80    <path d="M2033.7,360.6c-0.5-7.7-5-14.9-13.7-14.9c-7.6,0-13.4,6.4-14.1,14.9H2033.7z M2001.9,362.4v-0.2c0-11.1,7.8-20,18.2-20
     81        c10.7,0,17.6,8.7,17.6,20c0,0.7,0,0.9-0.1,1.5h-31.7c0.7,9.5,7.5,15.1,15,15.1c5.9,0,10-2.6,13.1-6l2.6,2.3
     82        c-3.9,4.2-8.5,7.2-15.8,7.2C2010.7,382.4,2001.9,374.4,2001.9,362.4"/>
     83    <path class="st1" d="M2141.5,196.9c-1.1-8.3-4.4-15.4-9.8-21.3c-5.4-5.9-12.8-8.8-22.2-8.8c-17.5,0-27.7,10-30.6,30.1H2141.5z
     84         M2150.6,243.3l37.1,11.9c-15.5,24.4-39.8,36.6-72.9,36.6c-26.4,0-46.9-6.9-61.7-20.9c-14.8-13.9-22.2-32.2-22.2-54.8
     85        c0-23.1,7.6-42.3,22.9-57.8c15.2-15.4,34.6-23.2,58.2-23.2c17.1,0,31.9,4.3,44.3,13c12.5,8.6,21.1,19.4,25.9,32.3
     86        c4.8,12.9,7.3,27.2,7.3,43.1h-111.4c0.7,13.6,5,23.2,12.9,28.9c7.9,5.7,16.2,8.5,24.9,8.5C2127.4,260.9,2139,255,2150.6,243.3
     87         M2006.5,138.8v60.7h-34c-7.7-16.7-19.8-25-36.3-25c-10.5,0-18.9,3.5-25.1,10.4c-6.2,7-9.3,16.2-9.3,27.9c0,14.1,3.3,24.5,9.9,31.3
     88        c6.6,6.7,14.7,10.1,24.2,10.1c7.6,0,14.8-2.2,21.6-6.6c6.8-4.4,12.2-10.2,16.4-17.4l37.1,16.3c-13.8,30.1-38,45.2-72.6,45.2
     89        c-26.1,0-46.8-7.1-62.3-21.3c-15.5-14.2-23.2-33.2-23.2-57c0-23.8,7.6-42.5,22.8-56.3c15.2-13.8,32.9-20.6,53.1-20.6
     90        c16.2,0,31.3,4.9,45.3,14.7v-12.4H2006.5z M1654.3,173.3v-34.4h70.6v13.9c14.4-10.8,29-16.2,43.9-16.2c30.2,0,45.3,19.3,45.3,57.8
     91        v59.6h22.6v34.4h-70.3v-90.5c0-8.1-1.1-13.7-3.3-16.7c-2.2-3-5.8-4.5-10.9-4.5c-8.9,0-17.9,3.2-27.2,9.7v67.5h23v34.4h-93.6v-34.4
     92        h22.9v-80.6H1654.3z M1584.4,196.9c-1.1-8.3-4.4-15.4-9.8-21.3c-5.4-5.9-12.8-8.8-22.2-8.8c-17.5,0-27.7,10-30.6,30.1H1584.4z
     93         M1593.5,243.3l37.1,11.9c-15.5,24.4-39.8,36.6-72.9,36.6c-26.4,0-46.9-6.9-61.7-20.9c-14.8-13.9-22.2-32.2-22.2-54.8
     94        c0-23.1,7.6-42.3,22.9-57.8c15.2-15.4,34.6-23.2,58.2-23.2c17.1,0,31.9,4.3,44.3,13c12.5,8.6,21.1,19.4,25.9,32.3
     95        c4.8,12.9,7.3,27.2,7.3,43.1H1521c0.7,13.6,5,23.2,12.9,28.9c7.9,5.7,16.2,8.5,24.9,8.5C1570.3,260.9,1581.8,255,1593.5,243.3
     96         M1452.5,253.9v34.4h-92.8v-34.4h21.6v-80.6h-20.1v-34.4h20.1v-13.7c0-15.8,4.9-28.9,14.6-39.5c9.7-10.6,24.2-15.8,43.5-15.8
     97        c23.4,0,40,7,49.9,21l-34.6,27c-3.1-10.7-7.5-16.1-13.3-16.1c-8.2,0-12.4,6.9-12.4,20.7v16.4h23.5v34.4H1429v80.6H1452.5z"/>
     98    <path class="st0" d="M1287.6,213.3c0-14.3-3.1-24.5-9.2-30.6c-6.1-6.1-13.1-9.1-20.9-9.1c-9.4,0-16.6,3.6-21.7,10.9
     99        c-5.1,7.3-7.6,16.8-7.6,28.7c0,11.2,2.5,20.7,7.6,28.3c5,7.7,12.4,11.5,21.9,11.5c7.9,0,14.9-3.1,20.9-9.3
     100        C1284.6,237.4,1287.6,227.3,1287.6,213.3 M1359.4,253.9v34.4h-72.3v-17.8c-13.3,13.3-27.7,20-43.3,20c-18.6,0-34.1-7.6-46.3-22.7
     101        c-12.3-15.1-18.4-33.5-18.4-55c0-21.8,6.3-40.2,18.8-55.2c12.6-15,27.9-22.5,46-22.5c17.4,0,31.8,6.8,43.1,20.3v-47.5h-23.3V73.5
     102        h71.1v180.4H1359.4z M1139.2,253.9v34.4H1034v-34.4h27.6v-80.6h-25.9v-34.4h69.7v38c2.7-10.9,8.8-20.4,18.3-28.3
     103        c9.5-8,20.8-12,33.8-12c2.2,0,4.7,0.1,7.7,0.2v45.1c-12,0-21.9,1.3-29.5,4c-7.6,2.7-13.9,8.6-18.8,17.6c-4.9,9.1-7.4,19.8-7.4,32.1
     104        v18.4H1139.2z M934.7,254.7c8.9,0,16-3.4,21.5-10.2c5.5-6.8,8.3-17.5,8.3-32c0-12.8-2.7-22.7-8-29.9c-5.3-7.2-12.6-10.7-21.8-10.7
     105        c-19.7,0-29.5,14.2-29.5,42.6c0,11.6,2.4,21.2,7.3,28.8C917.4,250.9,924.8,254.7,934.7,254.7 M934.8,291.7c-22,0-40.6-7-55.8-20.9
     106        c-15.2-14-22.8-33.1-22.8-57.4c0-24.3,7.6-43.4,22.8-57.4c15.2-14,33.8-20.9,55.8-20.9c22.1,0,40.8,7,55.9,20.9
     107        c15.1,14,22.7,33.1,22.7,57.4c0,24-7.5,43-22.5,57.1C976,284.7,957.3,291.7,934.8,291.7 M646.3,289.7L585,109.8h-22.7V73.5h96.8
     108        v36.3h-22.2L671.8,213l32.7-103.2h-19.5V73.5h77.2v36.3h-19.9L777.6,213l33.8-103.2h-21.5V73.5h86v36.3h-23.3l-59.3,179.9h-40.2
     109        l-33.8-98.1l-32,98.1H646.3z"/>
     110    <g>
     111        <path class="st2" d="M238.5,280.2C238.5,280.2,238.6,280.2,238.5,280.2C238.6,280.2,238.5,280.2,238.5,280.2L238.5,280.2z"/>
     112        <path class="st3" d="M257.4,79.6L257.4,79.6l26,57.2l0.2,0.5l-8.9,0c0,0.1,0,0.1,0,0.2c0.1,0.8,0.3,1.7,0.3,2.6
     113            c0,2.8-0.7,5.4-2,7.7c-0.6,1.1-1.2,2.1-2,3c0,0-1.2,12.5-1,35.7c0,0,0,0.1,0,0.1c0.1,13.9,0.8,34.5,2.5,56.9
     114            c27.2,1.5,52.5,4.6,75.7,8.7l0-97l-6.8,0l17.4-38.1l16.7,38.3l-6.8,0l0,100.9c24.8,5.1,46.8,11.3,65.8,17.5l0-84.5l-6.8,0
     115            l17.4-38.1l16.7,38.3l-6.8,0l0,91.5c22.5,8.3,39.3,16.2,49.7,21.6c13-122.2-13.6-228.2-13.6-228.2c-123.7-4-233.7-69.8-233.7-69.8
     116            V79.6z"/>
     117        <path class="st3" d="M455,302.5l0,95.5h12.1v0h2.9h7.5v0h6.5c4.1-13.2,7.6-26.9,10.6-40.2l0,0c3.7-13.3,5.9-24.3,7.3-32.2
     118            c0,0,0.1-0.3,0.1-0.4c0.1-0.5,0.2-1,0.2-1.5C494.8,319.8,478.7,311.6,455,302.5z"/>
     119        <path class="st3" d="M368.7,276.8l0,121.2h12.1v0h22.3v0h11.7h19.7l0-103C415.8,288.7,393.7,282.3,368.7,276.8z"/>
     120        <path class="st3" d="M348.3,398V272.7c-22.7-4.1-47.5-7.3-74.1-9c0,0.1,0,0.2,0,0.3c0.1,0.5,1.7,13.9,2,16.1
     121            c4.1,30.9,12.5,79.7,21.1,117.7h-0.4c0,0,0,0,0,0.1v0h42.2v0l0,0H348.3z"/>
     122        <path class="st4" d="M217.5,397.9c8.6-38,16.9-86.8,21.1-117.7c0,0-0.1,0-0.1,0l0,0c0,0,0.1,0,0.1,0c0.3-2.2,2-15.6,2-16.1
     123            c0-0.1,0-0.2,0-0.3c-26.8,1.7-51.6,4.9-74.1,9V398v0h9.2v0h42.2c0,0,0,0,0,0c0,0,0,0,0-0.1H217.5z"/>
     124        <path class="st4" d="M59.8,280.8l0-91.5l-6.8,0L69.7,151l17.4,38.1l-6.8,0l0,84.5c19-6.2,41-12.3,65.8-17.5l0-100.9l-6.8,0
     125            l16.7-38.3l17.4,38.1l-6.8,0l0,97c23.2-4,48.5-7.2,75.7-8.7c1.6-22.5,2.4-43,2.5-56.9c0,0,0-0.1,0-0.1c0.1-23.2-1-35.7-1-35.7
     126            c-0.8-0.9-1.4-1.9-2-3c-1.2-2.3-2-4.9-2-7.7c0-0.9,0.1-1.7,0.3-2.6c0-0.1,0-0.1,0-0.2l-8.9,0l0.2-0.5l26-57.1l0,0V4.3
     127            c0,0-110,65.8-233.7,69.8c0,0-26.5,106-13.6,228.2C20.5,297.1,37.3,289.2,59.8,280.8z"/>
     128        <path class="st4" d="M80.3,294.9l0,103.1H100h11.7v0H134v0v0h12.1v0l0-121.2C120.2,282.4,98,288.9,80.3,294.9z"/>
     129        <path class="st4" d="M12.8,323.7C12.8,323.7,12.7,323.7,12.8,323.7c0.1,0.5,0.1,1,0.2,1.5c0,0.1,0,0.3,0.1,0.4c0,0,0,0,0,0
     130            c1.4,7.9,3.6,18.9,7.3,32.2l0,0c3,13.3,6.5,26.9,10.6,40.2h6.5v0h10.3v0h12.1l0-95.6C36.2,311.5,20,319.7,12.8,323.7z"/>
     131    </g>
     132    <g>
     133        <path class="st5" d="M2206.7,132.5c9.4,0,16.7,7.3,16.7,16.4c0,9.3-7.3,16.5-16.8,16.5c-9.4,0-16.9-7.2-16.9-16.5
     134            c0-9.1,7.5-16.4,16.9-16.4H2206.7z M2206.5,135.8c-7.2,0-12.6,5.9-12.6,13.1c0,7.3,5.4,13.1,12.8,13.1c7.2,0.1,12.5-5.8,12.5-13.1
     135            C2219.2,141.7,2213.9,135.8,2206.5,135.8L2206.5,135.8z M2204,157.4h-3.8v-16.3c1.5-0.3,3.6-0.6,6.3-0.6c3.1,0,4.5,0.5,5.7,1.3
     136            c0.9,0.7,1.6,2,1.6,3.5c0,1.9-1.4,3.3-3.4,3.9v0.2c1.6,0.5,2.5,1.8,3,4c0.5,2.5,0.8,3.5,1.2,4h-4.1c-0.5-0.6-0.8-2-1.3-3.9
     137            c-0.3-1.8-1.3-2.6-3.4-2.6h-1.8V157.4z M2204.1,148.2h1.8c2.1,0,3.8-0.7,3.8-2.4c0-1.5-1.1-2.5-3.5-2.5c-1,0-1.7,0.1-2.1,0.2
     138            V148.2z"/>
     139    </g>
     140</g>
     141</svg>
  • wordfence/trunk/lib/wfActivityReport.php

    r1949784 r2124102  
    590590                $paramValue = base64_decode($actionData['paramValue']);
    591591                if (strlen($paramValue) > 100) {
    592                     $paramValue = substr($paramValue, 0, 100) . chr(2026);
     592                    $paramValue = substr($paramValue, 0, 100) . '...';
    593593                }
    594594               
  • wordfence/trunk/lib/wfConfig.php

    r2107617 r2124102  
    14091409                {
    14101410                    $wafConfig->setConfig($key, wfUtils::truthyToInt($value));
     1411                    if (method_exists(wfWAF::getInstance()->getStorageEngine(), 'purgeIPBlocks')) {
     1412                        wfWAF::getInstance()->getStorageEngine()->purgeIPBlocks(wfWAFStorageInterface::IP_BLOCKS_BLACKLIST);
     1413                    }
    14111414                    $saved = true;
    14121415                    break;
     
    14571460                    }
    14581461                   
     1462                    if (method_exists(wfWAF::getInstance()->getStorageEngine(), 'purgeIPBlocks')) {
     1463                        wfWAF::getInstance()->getStorageEngine()->purgeIPBlocks(wfWAFStorageInterface::IP_BLOCKS_BLACKLIST);
     1464                    }
     1465                   
    14591466                    $saved = true;
    14601467                    break;
     
    14701477                   
    14711478                    $wafConfig->setConfig('whitelistedServiceIPs', @json_encode(wfUtils::whitelistedServiceIPs()));
     1479                   
     1480                    if (method_exists(wfWAF::getInstance()->getStorageEngine(), 'purgeIPBlocks')) {
     1481                        wfWAF::getInstance()->getStorageEngine()->purgeIPBlocks(wfWAFStorageInterface::IP_BLOCKS_BLACKLIST);
     1482                    }
     1483                   
    14721484                    $saved = true;
    14731485                    break;
     
    16671679                }
    16681680                else if (WFWAF_DEBUG) {
    1669                     //TODO: remove me when done with QA
    16701681                    error_log("*** DEBUG: Config option '{$key}' missing save handler.");
    16711682                }
  • wordfence/trunk/lib/wordfenceClass.php

    r2107617 r2124102  
    32653265            $type = 2;
    32663266        }
     3267        else if (defined('DOING_AJAX') && DOING_AJAX) {
     3268            $type = 3;
     3269            if (isset($_REQUEST['action']) && ($_REQUEST['action'] == 'wordfence_ls_authenticate' || $_REQUEST['action'] == 'nopriv_wordfence_ls_authenticate')) {
     3270                $type = 301;
     3271            }
     3272        }
    32673273        else if (isset($_SERVER['SCRIPT_FILENAME']) && $_SERVER['SCRIPT_FILENAME'] == $wploginPath) {
    32683274            $type = 1;
     
    57545760        }
    57555761       
     5762        wp_register_script('chart-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/Chart.bundle.min.js'), array('jquery'), '2.4.0');
     5763        wp_register_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery'), WORDFENCE_VERSION);
     5764        wp_register_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
    57565765        wp_register_style('wordfence-font-awesome-style', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-font-awesome.css'), '', WORDFENCE_VERSION);
    57575766
     
    62466255    }
    62476256    public static function menu_tools() {
    6248         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
    6249         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery'), WORDFENCE_VERSION);
     6257        wp_enqueue_style('wordfence-select2-css');
     6258        wp_enqueue_script('wordfence-select2-js');
    62506259
    62516260        $subpage = filter_input(INPUT_GET, 'subpage', FILTER_SANITIZE_STRING);
     
    63326341        wp_enqueue_style('wordfence-jquery-ui-theme-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui.theme.min.css'), array(), WORDFENCE_VERSION);
    63336342        wp_enqueue_style('wordfence-jquery-ui-timepicker-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui-timepicker-addon.css'), array(), WORDFENCE_VERSION);
    6334         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
     6343        wp_enqueue_style('wordfence-select2-css');
    63356344       
    63366345        wp_enqueue_script('wordfence-timepicker-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery-ui-timepicker-addon.js'), array('jquery', 'jquery-ui-datepicker', 'jquery-ui-slider'), WORDFENCE_VERSION);
    6337         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery', 'jquery-ui-tooltip'), WORDFENCE_VERSION);
     6346        wp_enqueue_script('wordfence-select2-js');
    63386347       
    63396348        try {
     
    63856394        wp_enqueue_style('wordfence-jquery-ui-theme-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui.theme.min.css'), array(), WORDFENCE_VERSION);
    63866395        wp_enqueue_style('wordfence-jquery-ui-timepicker-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui-timepicker-addon.css'), array(), WORDFENCE_VERSION);
    6387         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
     6396        wp_enqueue_style('wordfence-select2-css');
    63886397
    63896398        wp_enqueue_script('wordfence-timepicker-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery-ui-timepicker-addon.js'), array('jquery', 'jquery-ui-datepicker', 'jquery-ui-slider'), WORDFENCE_VERSION);
    6390         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery', 'jquery-ui-tooltip'), WORDFENCE_VERSION);
    6391         wp_enqueue_script('chart-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/Chart.bundle.min.js'), array('jquery'), '2.4.0');
     6399        wp_enqueue_script('wordfence-select2-js');
     6400        wp_enqueue_script('chart-js');
    63926401
    63936402        try {
     
    64486457    }
    64496458    public static function menu_dashboard() {
    6450         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
    6451         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery', 'jquery-ui-tooltip'), WORDFENCE_VERSION);
    6452         wp_enqueue_script('chart-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/Chart.bundle.min.js'), array('jquery'), '2.4.0');
     6459        wp_enqueue_style('wordfence-select2-css');
     6460        wp_enqueue_script('wordfence-select2-js');
     6461        wp_enqueue_script('chart-js');
    64536462       
    64546463        if (wfConfig::get('keyType') == wfAPI::KEY_TYPE_PAID_EXPIRED || (wfConfig::get('keyType') == wfAPI::KEY_TYPE_PAID_CURRENT && wfConfig::get('keyExpDays') < 30)) {
     
    64706479    }
    64716480    public static function menu_scan() {
    6472         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
    6473         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery', 'jquery-ui-tooltip'), WORDFENCE_VERSION);
     6481        wp_enqueue_style('wordfence-select2-css');
     6482        wp_enqueue_script('wordfence-select2-js');
    64746483       
    64756484        if (isset($_GET['subpage']) && $_GET['subpage'] == 'scan_options') {
     
    64866495   
    64876496    public static function menu_support() {
    6488         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
    6489         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery'), WORDFENCE_VERSION);
     6497        wp_enqueue_style('wordfence-select2-css');
     6498        wp_enqueue_script('wordfence-select2-js');
    64906499       
    64916500        require('menu_support.php');
     
    64956504        wfConfig::set('showWfCentralUI', 1);
    64966505
    6497         wp_enqueue_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION);
    6498         wp_enqueue_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery'), WORDFENCE_VERSION);
     6506        wp_enqueue_style('wordfence-select2-css');
     6507        wp_enqueue_script('wordfence-select2-js');
    64996508
    65006509        require('menu_wordfence_central.php');
     
    78637872                    $paramValue = base64_decode($actionData['paramValue']);
    78647873                    if (strlen($paramValue) > 100) {
    7865                         $paramValue = substr($paramValue, 0, 100) . chr(2026);
     7874                        $paramValue = substr($paramValue, 0, 100) . '...';
    78667875                    }
    78677876                   
  • wordfence/trunk/modules/login-security/classes/controller/ajax.php

    r2087795 r2124102  
    7373                'required_parameters' => array('nonce', 'id'),
    7474            ),
     75            'reset_recaptcha_stats' => array(
     76                'handler' => array($this, '_ajax_reset_recaptcha_stats_callback'),
     77                'permissions' => array(Controller_Permissions::CAP_MANAGE_SETTINGS => __('You do not have permission to reset reCAPTCHA statistics.', 'wordfence-2fa')),
     78                'required_parameters' => array('nonce'),
     79            ),
    7580        );
    7681       
     
    400405        foreach ($admins as $a) {
    401406            /** @var \WP_User $a */
    402             if (!Controller_Users::shared()->has_2fa_active($a)) {
     407            if (Controller_Users::shared()->has_2fa_active($a)) {
    403408                continue;
    404409            }
     
    447452        Controller_Notices::shared()->remove_notice($_POST['id'], false, wp_get_current_user());
    448453    }
     454   
     455    public function _ajax_reset_recaptcha_stats_callback() {
     456        Controller_Settings::shared()->set_array(Controller_Settings::OPTION_CAPTCHA_STATS, array('counts' => array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), 'avg' => 0));
     457        $response = array('success' => true);
     458        return die(json_encode($response));
     459    }
    449460}
  • wordfence/trunk/modules/login-security/classes/controller/captcha.php

    r2087795 r2124102  
    112112     */
    113113    public function is_human($score) {
     114        if (Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_CAPTCHA_TEST_MODE)) {
     115            return true;
     116        }
     117       
    114118        $threshold = $this->threshold();
    115119        return ($score >= $threshold || abs($score - $threshold) < 0.0001);
  • wordfence/trunk/modules/login-security/classes/controller/db.php

    r2087795 r2124102  
    5959    }
    6060   
     61    public function uninstall() {
     62        $tables = array(self::TABLE_2FA_SECRETS, self::TABLE_SETTINGS);
     63        foreach ($tables as $table) {
     64            global $wpdb;
     65            $wpdb->query('DROP TABLE IF EXISTS `' . self::network_table($table) . '`');
     66        }
     67    }
     68   
    6169    protected function _create_schema() {
    6270        $tables = array(
  • wordfence/trunk/modules/login-security/classes/controller/settings.php

    r2104182 r2124102  
    1919    const OPTION_ALLOW_XML_RPC = 'allow-xml-rpc';
    2020    const OPTION_ENABLE_AUTH_CAPTCHA = 'enable-auth-captcha';
     21    const OPTION_CAPTCHA_TEST_MODE = 'recaptcha-test-mode';
    2122    const OPTION_RECAPTCHA_SITE_KEY = 'recaptcha-site-key';
    2223    const OPTION_RECAPTCHA_SECRET = 'recaptcha-secret';
    2324    const OPTION_RECAPTCHA_THRESHOLD = 'recaptcha-threshold';
     25    const OPTION_DELETE_ON_DEACTIVATION = 'delete-deactivation';
    2426   
    2527    //Internal
     
    3133    const OPTION_SHARED_SYMMETRIC_SECRET_KEY = 'shared-symmetric-secret';
    3234    const OPTION_DISMISSED_FRESH_INSTALL_MODAL = 'dismissed-fresh-install-modal';
     35    const OPTION_CAPTCHA_STATS = 'captcha-stats';
    3336   
    3437    protected $_settingsStorage;
     
    6770            self::OPTION_ALLOW_XML_RPC => array('value' => true, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
    6871            self::OPTION_ENABLE_AUTH_CAPTCHA => array('value' => false, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
     72            self::OPTION_CAPTCHA_STATS => array('value' => '{"counts":[0,0,0,0,0,0,0,0,0,0,0],"avg":0}', 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
    6973            self::OPTION_RECAPTCHA_THRESHOLD => array('value' => 0.5, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
    7074            self::OPTION_LAST_SECRET_REFRESH => array('value' => 0, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
     75            self::OPTION_DELETE_ON_DEACTIVATION => array('value' => false, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
    7176        ));
    7277    }
     
    130135            case self::OPTION_ALLOW_XML_RPC:
    131136            case self::OPTION_ENABLE_AUTH_CAPTCHA:
     137            case self::OPTION_CAPTCHA_TEST_MODE:
    132138            case self::OPTION_DISMISSED_FRESH_INSTALL_MODAL:
     139            case self::OPTION_DELETE_ON_DEACTIVATION:
    133140                return true;
    134141               
     
    139146            //Array
    140147            case self::OPTION_GLOBAL_NOTICES:
     148            case self::OPTION_CAPTCHA_STATS:
    141149                return preg_match('/^\[.*\]$/', $value) || preg_match('/^\{.*\}$/', $value); //Only a rough JSON validation
    142150               
     
    166174            case self::OPTION_RECAPTCHA_THRESHOLD:
    167175                return is_numeric($value) && $value >= 0 && $value <= 1;
     176            case self::OPTION_RECAPTCHA_SITE_KEY:
     177                if (empty($value)) {
     178                    return true;
     179                }
     180               
     181                $response = wp_remote_get('https://www.google.com/recaptcha/api.js?render=' . urlencode($value));
     182               
     183                if (!is_wp_error($response)) {
     184                    $status = wp_remote_retrieve_response_code($response);
     185                    if ($status == 200) {
     186                        return true;
     187                    }
     188                   
     189                    $data = wp_remote_retrieve_body($response);
     190                    if (strpos($data, 'grecaptcha') === false) {
     191                        return __('Unable to validate the reCAPTCHA site key. Please check the key and try again.', 'wordfence-2fa');
     192                    }
     193                    return true;
     194                }
     195                return sprintf(__('An error was encountered while validating the reCAPTCHA site key: %s', 'wordfence-2fa'), $response->get_error_message());
    168196        }
    169197        return true;
     
    202230            case self::OPTION_ALLOW_XML_RPC:
    203231            case self::OPTION_ENABLE_AUTH_CAPTCHA:
     232            case self::OPTION_CAPTCHA_TEST_MODE:
    204233            case self::OPTION_DISMISSED_FRESH_INSTALL_MODAL:
     234            case self::OPTION_DELETE_ON_DEACTIVATION:
    205235                return $this->_truthy_to_bool($value);
    206236               
  • wordfence/trunk/modules/login-security/classes/controller/time.php

    r2104182 r2124102  
    9696        foreach ($servers as $s) {
    9797            $socket = @fsockopen('udp://' . $s, 123, $err_no, $err_str, 1);
    98             stream_set_timeout($socket, 1);
    9998            if ($socket) {
     99                stream_set_timeout($socket, 1);
    100100                $remote_originate = microtime(true);
    101101                $secondsNTP = ((int) $remote_originate) + self::NTP_EPOCH_CONVERT;
  • wordfence/trunk/modules/login-security/classes/controller/users.php

    r2087795 r2124102  
    312312   
    313313    /**
     314     * Records the reCAPTCHA score for later display.
     315     *
     316     * This is not atomic, which means this can miscount on hits that overlap, but the overhead of being atomic is not
     317     * worth it for our use.
     318     *
     319     * @param \WP_User $user|null
     320     * @param float $score
     321     */
     322    public function record_captcha_score($user, $score) {
     323        if (!Controller_CAPTCHA::shared()->enabled()) { return; }
     324        if ($this->has_2fa_active($user)) { return; } //2FA activated users do not retrieve a score
     325       
     326        if ($user) { update_user_meta($user->ID, 'wfls-last-captcha-score', $score); }
     327        $stats = Controller_Settings::shared()->get_array(Controller_Settings::OPTION_CAPTCHA_STATS);
     328        $int_score = min(max((int) ($score * 10), 0), 10);
     329        $count = array_sum($stats['counts']);
     330        $stats['counts'][$int_score]++;
     331        $stats['avg'] = ($stats['avg'] * $count + $int_score) / ($count + 1);
     332        Controller_Settings::shared()->set_array(Controller_Settings::OPTION_CAPTCHA_STATS, $stats);
     333    }
     334   
     335    /**
    314336     * Returns the active and inactive user counts.
    315337     *
  • wordfence/trunk/modules/login-security/classes/controller/wordfencels.php

    r2104182 r2124102  
    125125            }
    126126        }
     127       
     128        if (Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_CAPTCHA_TEST_MODE) && Controller_CAPTCHA::shared()->enabled() && Controller_Permissions::shared()->can_manage_settings()) {
     129            if (is_multisite()) {
     130                add_action('network_admin_notices', array($this, '_recaptcha_test_notice'));
     131            }
     132            else {
     133                add_action('admin_notices', array($this, '_recaptcha_test_notice'));
     134            }
     135        }
    127136    }
    128137   
     
    135144    }
    136145   
     146    public function _recaptcha_test_notice() {
     147        echo '<div class="notice notice-warning"><p>' . sprintf(__('reCAPTCHA test mode is enabled. While enabled, login and registration requests will be checked for their score but will not be blocked if the score is below the minimum score. <a href="%s">Manage Settings</a>', 'wordfence-2fa'), esc_url(network_admin_url('admin.php?page=WFLS#top#settings'))) . '</p></div>';
     148    }
     149   
    137150    /**
    138151     * Installation/Uninstallation
     
    151164            }
    152165            delete_option($opt);
     166        }
     167       
     168        if (Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_DELETE_ON_DEACTIVATION)) {
     169            Controller_DB::shared()->uninstall();
    153170        }
    154171    }
     
    243260            }
    244261            wp_enqueue_script('wordfence-ls-admin', Model_Asset::js('admin.js'), array('jquery'), WORDFENCE_LS_VERSION);
     262            if (!WORDFENCE_LS_FROM_CORE) {
     263                wp_register_script('chart-js', Model_Asset::js('Chart.bundle.min.js'), array('jquery'), '2.4.0');
     264                wp_register_script('wordfence-select2-js', Model_Asset::js('wfselect2.min.js'), array('jquery'), WORDFENCE_LS_VERSION);
     265                wp_register_style('wordfence-select2-css', Model_Asset::css('wfselect2.min.css'), array(), WORDFENCE_LS_VERSION);
     266            }
     267            wp_enqueue_script('chart-js');
     268            wp_enqueue_script('wordfence-select2-js');
     269            wp_enqueue_style('wordfence-select2-css');
    245270            wp_enqueue_style('wordfence-ls-admin', Model_Asset::css('admin.css'), array(), WORDFENCE_LS_VERSION);
    246271            wp_enqueue_style('wordfence-ls-colorbox', Model_Asset::css('colorbox.css'), array(), WORDFENCE_LS_VERSION);
    247272            wp_enqueue_style('wordfence-ls-ionicons', Model_Asset::css('ionicons.css'), array(), WORDFENCE_LS_VERSION);
     273            if (!WORDFENCE_LS_FROM_CORE) { wp_enqueue_style('wordfence-ls-font-awesome', Model_Asset::css('font-awesome.css'), array(), WORDFENCE_LS_VERSION); }
    248274            wp_localize_script('wordfence-ls-admin', 'WFLSVars', array(
    249275                'ajaxurl' => admin_url('admin-ajax.php'),
     
    400426                }
    401427               
    402                 update_user_meta($user->ID, 'wfls-last-captcha-score', $score);
     428                Controller_Users::shared()->record_captcha_score($user, $score);
    403429               
    404430                if (isset($_REQUEST['wfls-email-verification']) && !empty($_REQUEST['wfls-email-verification']) && is_string($_REQUEST['wfls-email-verification'])) {
     
    422448                    $encrypted = Model_Symmetric::encrypt((string) $user->ID);
    423449                    if ($encrypted) {
    424                         $jwt = new Model_JWT(array('user' => $encrypted), Controller_Time::time() + 60 * 15 /* minutes */);
     450                        $jwt = new Model_JWT(array('user' => $encrypted), Controller_Time::time() + 60 * WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES);
    425451                        $view = new Model_View('email/login-verification', array(
    426452                            'siteName' => get_bloginfo('name', 'raw'),
     
    618644       
    619645        if ($requireCAPTCHA) {
     646            Controller_Users::shared()->record_captcha_score(null, $score);
     647           
    620648            if (!Controller_CAPTCHA::shared()->is_human($score)) { //Score is below the human threshold, block the user registration
    621649                $encryptedIP = Model_Symmetric::encrypt(Model_Request::current()->ip());
  • wordfence/trunk/modules/login-security/views/options/option-captcha.php

    r2089400 r2124102  
    1818                <ul class="wfls-flex-vertical wfls-flex-align-left">
    1919                    <li>
    20                         <strong id="wfls-enable-auth-captcha-label"><?php _e('Enable reCAPTCHA on the login and user registration pages', 'wordfence-2fa'); ?></strong>
     20                        <strong id="wfls-enable-auth-captcha-label"><?php _e('Enable reCAPTCHA on the login and user registration pages', 'wordfence-ls'); ?></strong>
    2121                    </li>
    22                     <li class="wfls-option-subtitle"><?php _e('Note: This feature requires a free site key and secret for the <a href="https://www.google.com/recaptcha/intro/v3.html" target="_blank" rel="noopener noreferrer">Google reCAPTCHA v3 Service</a>.', 'wordfence-2fa'); ?></li>
     22                    <li class="wfls-option-subtitle"><?php printf(__('reCAPTCHA v3 does not make users solve puzzles or click a checkbox like previous versions. The only visible part is the reCAPTCHA logo. If a visitor\'s browser fails the CAPTCHA, Wordfence will send an email to the user\'s address with a link they can click to verify that they are a user of your site. You can read further details <a href="%s" target="_blank" rel="noopener noreferrer">in our documentation</a>.', 'wordfence-ls'), \WordfenceLS\Controller_Support::esc_supportURL(\WordfenceLS\Controller_Support::ITEM_MODULE_LOGIN_SECURITY_CAPTCHA)); ?></li>
    2323                </ul>
    2424            </li>
     
    3131                <table>
    3232                    <tr class="wfls-option wfls-option-text" data-original-value="<?php echo esc_attr($siteKeyValue); ?>" data-text-option="<?php echo esc_attr($siteKeyOptionName); ?>">
    33                         <th id="wfls-enable-captcha-site-key-label" class="wfls-padding-add-bottom"><?php _e('reCAPTCHA v3 Site Key', 'wordfence'); ?></th>
     33                        <th id="wfls-enable-captcha-site-key-label" class="wfls-padding-add-bottom"><?php _e('reCAPTCHA v3 Site Key', 'wordfence-ls'); ?></th>
    3434                        <td class="wfls-option-text wfls-padding-add-bottom"><input type="text" name="recaptchaSiteKey" id="input-recaptchaSiteKey" class="wfls-form-control" value="<?php echo esc_attr($siteKeyValue); ?>"<?php if (!$currentEnableValue) { echo ' disabled'; } ?>></td>
    3535                    </tr>
    3636                    <tr class="wfls-option wfls-option-text" data-original-value="<?php echo esc_attr($secretValue); ?>" data-text-option="<?php echo esc_attr($secretOptionName); ?>">
    37                         <th id="wfls-enable-captcha-secret-label"><?php _e('reCAPTCHA v3 Secret', 'wordfence'); ?></th>
     37                        <th id="wfls-enable-captcha-secret-label"><?php _e('reCAPTCHA v3 Secret', 'wordfence-ls'); ?></th>
    3838                        <td class="wfls-option-text"><input type="text" name="recaptchaSecret" id="input-recaptchaSecret" class="wfls-form-control" value="<?php echo esc_attr($secretValue); ?>"<?php if (!$currentEnableValue) { echo ' disabled'; } ?>></td>
    3939                    </tr>
    4040                </table>
     41            </li>
     42        </ul>
     43        <ul class="wfls-option wfls-padding-no-top">
     44            <li class="wfls-option-spacer"></li>
     45            <li class="wfls-option-title">
     46                <ul class="wfls-flex-vertical wfls-flex-align-left">
     47                    <li class="wfls-option-subtitle"><?php _e('Note: This feature requires a free site key and secret for the <a href="https://www.google.com/recaptcha/intro/v3.html" target="_blank" rel="noopener noreferrer">Google reCAPTCHA v3 Service</a>.', 'wordfence-ls'); ?></li>
     48                </ul>
    4149            </li>
    4250        </ul>
  • wordfence/trunk/modules/login-security/views/options/option-require-2fa.php

    r2087795 r2124102  
    5454                <span id="wfls-require-2fa-grace-period-label" class="wfls-padding-add-left wfls-padding-add-right"><?php _e('Grace period to require 2FA', 'wordfence'); ?> </span>
    5555                <input type="text" name="require2FAGracePeriod" id="input-require2FAGracePeriod" class="wfls-datetime wfls-form-control" placeholder="Enabled on..." data-value="<?php echo $currentGracePeriodDateValue; ?>" data-original-value="<?php echo $currentGracePeriodDateValue; ?>"<?php echo $currentGracePeriodEnabledValue ? '' : ' disabled'; ?>>
    56                 <div class="wfls-padding-add-left"><a href="#" id="wfls-send-grace-period-notification" class="wfls-btn wfls-btn-sm wfls-btn-default<?php echo (\WordfenceLS\Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_REQUIRE_2FA_ADMIN) && \WordfenceLS\Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED) && \WordfenceLS\Controller_Time::time() < \WordfenceLS\Controller_Settings::shared()->get_int(\WordfenceLS\Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD)) ? '' : ' wfls-disabled'; ?>"><?php _e('Send Notification', 'wordfence-2fa'); ?></a></div>
    5756            </li>
     57        </ul>
     58    </li>
     59    <li>
     60        <ul class="wfls-option wfls-padding-no-top">
     61            <li class="wfls-option-spacer"></li>
     62            <li class="wfls-option-spacer"></li>
     63            <li><a href="#" id="wfls-send-grace-period-notification" class="wfls-btn wfls-btn-sm wfls-btn-default<?php echo (\WordfenceLS\Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_REQUIRE_2FA_ADMIN) && \WordfenceLS\Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED) && \WordfenceLS\Controller_Time::time() < \WordfenceLS\Controller_Settings::shared()->get_int(\WordfenceLS\Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD)) ? '' : ' wfls-disabled'; ?>"><?php _e('Send Notification', 'wordfence-2fa'); ?></a></li>
    5864        </ul>
    5965    </li>
  • wordfence/trunk/modules/login-security/views/settings/options.php

    r2087795 r2124102  
    1010        </div>
    1111        <div class="wfls-block-header-action wfls-block-header-action-text wfls-nowrap wfls-padding-add-right-responsive">
    12             <a href="#" id="wfls-cancel-changes" class="wfls-btn wfls-btn-sm wfls-btn-default wfls-disabled"><?php _e('Cancel Changes', 'wordfence-2fa'); ?></a>&nbsp;&nbsp;<a href="#" id="wfls-save-changes" class="wfls-btn wfls-btn-sm wfls-btn-primary wfls-disabled"><?php _e('Save Changes', 'wordfence-2fa'); ?></a>
     12            <a href="#" id="wfls-cancel-changes" class="wfls-btn wfls-btn-sm wfls-btn-default wfls-disabled"><?php _e('Cancel<span class="wfls-visible-sm-inline"> Changes</span>', 'wordfence-2fa'); ?></a>&nbsp;&nbsp;<a href="#" id="wfls-save-changes" class="wfls-btn wfls-btn-sm wfls-btn-primary wfls-disabled"><?php _e('Save<span class="wfls-visible-sm-inline"> Changes</span>', 'wordfence-2fa'); ?></a>
    1313        </div>
    1414    </div>
     
    114114                ?>
    115115            </li>
     116            <li>
     117                <?php
     118                echo \WordfenceLS\Model_View::create('options/option-captcha-threshold', array(
     119                ))->render();
     120                ?>
     121            </li>
     122            <li>
     123                <?php
     124                echo \WordfenceLS\Model_View::create('options/option-toggled', array(
     125                    'optionName' => \WordfenceLS\Controller_Settings::OPTION_CAPTCHA_TEST_MODE,
     126                    'enabledValue' => '1',
     127                    'disabledValue' => '0',
     128                    'value' => \WordfenceLS\Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_CAPTCHA_TEST_MODE) ? '1': '0',
     129                    'title' => new \WordfenceLS\Text\Model_HTML('<strong>' . __('Run reCAPTCHA in test mode', 'wordfence-2fa') . '</strong>'),
     130                    'subtitle' => __('While in test mode, reCAPTCHA will score login and registration requests but not actually block them. The scores will be recorded and can be used to select a human/bot threshold value.', 'wordfence-2fa'),
     131                ))->render();
     132                ?>
     133            </li>
    116134            <?php if (!WORDFENCE_LS_FROM_CORE): ?>
    117135            <li>
     
    121139            </li>
    122140            <?php endif; ?>
     141            <li>
     142                <?php
     143                echo \WordfenceLS\Model_View::create('options/option-toggled', array(
     144                    'optionName' => \WordfenceLS\Controller_Settings::OPTION_DELETE_ON_DEACTIVATION,
     145                    'enabledValue' => '1',
     146                    'disabledValue' => '0',
     147                    'value' => \WordfenceLS\Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_DELETE_ON_DEACTIVATION) ? '1': '0',
     148                    'title' => new \WordfenceLS\Text\Model_HTML('<strong>' . __('Delete Login Security tables and data on deactivation', 'wordfence-2fa') . '</strong>'),
     149                    'subtitle' => __('If enabled, all settings and 2FA records will be deleted on deactivation. If later reactivated, all users that previously had 2FA active will need to set it up again.', 'wordfence-2fa'),
     150                ))->render();
     151                ?>
     152            </li>
    123153        </ul>
    124154    </div>
  • wordfence/trunk/modules/login-security/wordfence-login-security.php

    r2107617 r2124102  
    2727    define('WORDFENCE_LS_FROM_CORE', ($wfCoreActive && isset($wfCoreLoading) && $wfCoreLoading));
    2828   
    29     define('WORDFENCE_LS_VERSION', '1.0.2');
    30     define('WORDFENCE_LS_BUILD_NUMBER', '1560795818');
     29    define('WORDFENCE_LS_VERSION', '1.0.3');
     30    define('WORDFENCE_LS_BUILD_NUMBER', '1563297204');
     31   
     32    if (!defined('WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES')) { define('WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES', 15); }
    3133   
    3234    if (!WORDFENCE_LS_FROM_CORE) {
  • wordfence/trunk/readme.txt

    r2107642 r2124102  
    185185
    186186== Changelog ==
     187
     188= 7.3.5 - July 16, 2019 =
     189* Improvement: Improved tagging of the login endpoint for brute force protection.
     190* Improvement: Added additional information about reCAPTCHA to its setting control.
     191* Improvement: Added a constant that may be overridden to customize the expiration time of login verification email links.
     192* Improvement: reCAPTCHA keys are now tested on saving to prevent accidentally inputting a v2 key.
     193* Improvement: Added a setting to control the reCAPTCHA human/bot threshold.
     194* Improvement: Added a separate option to trigger removal of Login Security tables and data on deactivation.
     195* Improvement: Reworked the reCAPTCHA implementation to trigger the token check on login/registration form submission to avoid the token expiring.
     196* Fix: Widened the reCAPTCHA key fields to allow the full keys to be visible.
     197* Fix: Fixed encoding of the ellipsis character when reporting malware finds.
     198* Fix: Disabling the IP blacklist once again correctly clears the block cache.
     199* Fix: Addressed an issue when outbound UDP connections are blocked where the NTP check could log an error.
     200* Fix: Added handling for reCAPTCHA's JavaScript failing to load, which previously blocked logging in.
     201* Fix: Fixed the functionality of the button to send 2FA grace period notifications.
     202* Fix: Fixed a missing icon for some help links when running in standalone mode.
    187203
    188204= 7.3.4 - June 17, 2019 =
  • wordfence/trunk/views/dashboard/options-group-general.php

    r2057777 r2124102  
    131131                            'value' => wfConfig::get('deleteTablesOnDeact') ? 1 : 0,
    132132                            'title' => __('Delete Wordfence tables and data on deactivation', 'wordfence'),
     133                            'subtitle' => __('Note: This does not include Login Security settings and tables. An option to delete those must be selected separately on the Login Security settings page.', 'wordfence'),
    133134                            'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_DASHBOARD_OPTION_DELETE_DEACTIVATION),
    134135                        ))->render();
  • wordfence/trunk/wordfence.php

    r2107617 r2124102  
    55Description: Wordfence Security - Anti-virus, Firewall and Malware Scan
    66Author: Wordfence
    7 Version: 7.3.4
     7Version: 7.3.5
    88Author URI: http://www.wordfence.com/
    99Network: true
     
    1616    exit;
    1717}
    18 define('WORDFENCE_VERSION', '7.3.4');
    19 define('WORDFENCE_BUILD_NUMBER', '1560795818');
     18define('WORDFENCE_VERSION', '7.3.5');
     19define('WORDFENCE_BUILD_NUMBER', '1563297204');
    2020define('WORDFENCE_BASENAME', function_exists('plugin_basename') ? plugin_basename(__FILE__) :
    2121    basename(dirname(__FILE__)) . '/' . basename(__FILE__));
Note: See TracChangeset for help on using the changeset viewer.